如何重定向重写的查询字符串URL

时间:2018-06-14 13:32:59

标签: .htaccess redirect url-rewriting

我正在使用以下规则

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]

1 个答案:

答案 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}匹配的原因是,我们确保您已经干扰重定向规则的重写规则不可能,因为重写引擎将遍历规则。