RewriteRule 不起作用

RewriteRule 不起作用

我想转换这个网址

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]

相关内容