问题描述
我想知道是否可以将 https://site1.com/en/article-details.test-article?item=test
之类的 URL 格式化为 https://site1.com/en/article-details/test-article?item=test
,因此基本上将 .test-article
更改为 /test-article
。
由于我的网站的工作方式,它只将 .test-article
识别为有效的选择器,因此阅读 https://httpd.apache.org/docs/2.4/rewrite/flags.html 似乎我可能需要使用 PT
标志向用户显示所需的 URL但将正确的传递给我的网站。
到目前为止,我用这个来代替斜线的点
RewriteCond %{REQUEST_URI} ^/([a-z]{2})/article-details.([a-z]{2})(/?)$
RewriteRule ^/([a-z]{2})/.* https://%{SERVER_NAME}/$1/$2 [L,NC,R=301]
编辑(这可以按照 ravinderSingh13 的建议格式化 URL)
RewriteEngine ON
RewriteCond %{REQUEST_URI} ^/([a-z]{2})/article-details.([^?]*)(/?)$
RewriteRule ^ https://%{SERVER_NAME}/%1/article-details/%2 [QSA,R=301,NE,L]
解决方法
根据您展示的样品,您可以尝试以下操作吗?请确保在测试您的网址之前清除浏览器缓存。
RewriteEngine ON
RewriteCond %{THE_REQUEST} \s/(en/article-details)\.(test-article)\?item=test\s [NC]
RewriteRule ^ https://site1.com/%1/%2 [QSA,R=301,NE,L]
根据 OP 的评论,在此处添加更多通用规则:
RewriteEngine ON
RewriteCond %{THE_REQUEST} \s/(en/article-details)\.([^?]*)\?item=test\s [NC]
RewriteRule ^ https://site1.com/%1/%2 [QSA,L]
,
您可以尝试将此规则作为最高规则:
RewriteEngine On
RewriteRule ^(.+)\.(test-article/?)$ /$1/$2 [R=302,L,NC]
测试此规则后将 302
更改为 301
。