我正在使用以下规则
RewriteRule ^([a-z0-9\-]+)/?$ category.php?cat=$1 [NC,L]
RewriteRule ^([a-z0-9\-]+)/([a-z0-9\-]+)/?$ category.php?cat=$1&subcat=$2 [NC,L]
重写以下网址
mynews/category.php?cat=News
mynews/category.php?cat=News&subcat=9
到
mynews/News/
mynews/News/9
它只是被重写了。但是如何自动将这些查询字符串URL重定向到重写的URL?
我在回答中建议使用以下规则,但不起作用
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /category\.php\?cat=([^&]+)&subcat=([0-9]+)
RewriteRule ^category\.php$ /%1/%2? [L,R]
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /category\.php\?cat=([^\ &]+)
RewriteRule ^category\.php$ /%1/? [L,R]
RewriteRule ^([a-z0-9\-]+)/?$ category.php?cat=$1 [NC,L]
RewriteRule ^([a-z0-9\-]+)/([a-z0-9\-]+)/?$ category.php?cat=$1&subcat=$2 [NC,L]
答案 0 :(得分:0)
您需要添加一些规则来执行外部重定向。这些重定向规则需要放在您已有的重写规则之前。所以它们看起来像这样:
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /category\.php\?cat=([^&]+)&subcat=([0-9]+)
RewriteRule ^category\.php$ /%1/%2? [L,R]
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /category\.php\?cat=([^\ &]+)
RewriteRule ^category\.php$ /%1/? [L,R]
这些会看到/category?cat=<something>
的请求,并在外部将浏览器重定向到效果更好的网址。我们需要与%{THE_REQUEST}
匹配的原因是,我们确保您已经干扰重定向规则的重写规则不可能,因为重写引擎将遍历规则。