我想转换这个网址
http://ts.thebenamorgroup.com/g2g/category.php?cate=mens
到:
http://ts.thebenamorgroup.com/g2g/category/cate/mens/
我有这条规则但它不起作用:
Options +FollowSymLinks
RewriteEngine on
RewriteRule category/cate/(.*)/ category.php?cate=$1
RewriteRule category/cate/(.*) category.php?cate=$1
答案1
你的逻辑是错误的:
RewriteRule category/cate/(.*)/ category.php?cate=$1
RewriteRule category/cate/(.*) category.php?cate=$1
这将尝试重category/cate/mens/
写成category.php?cate=mens
但是你不能直接反转它,因为 RewriteRule 不能使用查询字符串进行操作,所以你还需要使用 RewriteCond:
RewriteCond %{QUERY_STRING} cate=(.*)
RewriteRule /category.php category/cate/%1
请注意使用%1
来引用 中的反向引用RewriteCond
(而不是$1
中的反向引用RewriteRule
)
答案2
RewriteCond %{QUERY_STRING} cate=(.*)
RewriteRule g2g/category.php g2g/category/cate/%1? [L]
这会完全满足您的要求。请注意,RewriteRule 中的“?”会停止再次附加查询字符串 (?cate=mens)。
答案3
在https://stackoverflow.com/questions/17535520/rewriterule-doesnt-work@JonLin 回答了我的问题,它有效,我在这里发布,如果有人需要它
Options +FollowSymLinks
RewriteEngine on
RewriteBase /g2g/
RewriteRule ^category/cate/(.+?)/?$ category.php?cate=$1 [L]
RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /g2g/category\.php\?cate=([^&\ ]+)&?([^\ ]*)
RewriteRule ^ /g2g/category/cate/%2?%3 [L,R=301]