.htaccess文件中的重写规则有什么问题?

时间:2012-08-22 15:48:07

标签: regex mod-rewrite

RewriteEngine On

RewriteCond search.php
RewriteCond {$QUERYSTRING} category=restauran(.*)city=Montrea(.*)$ 
RewriteRule search.php.* http://www.mynewsite.fak/$1 [P]

我们的想法是将查询字符串中的category=restaurantcity=Montreal的任何调用重定向到http://www.mynewsite.fak,路径完整,例如:

myoldsite.fak/folderA/folderB/search.php?blah=blah...

转到

mynewsite.fak/folderA/folderB/search.php?blah=blah...

2 个答案:

答案 0 :(得分:1)

我注意到三件事。

首先,你在示例中拼错了查询字符串变量。它应该是{$QUERY_STRING}。这可能足以解决问题,但也有一些其他建议。

第二个问题是查询字符串的RewriteCond正在为每个值进行贪婪匹配。尝试更新以匹配可以专门进入字段的内容,例如\w+

第三个是RewriteRule本身。您可以从当前页面名称中删除.*,并将规则更改为更合适的名称,例如[R=301, L]。这将导致规则“重定向”HTTP 301(永久重定向)标头,L表示它是最后一个应用的规则。

总而言之,这应该(可能)起作用:

RewriteEngine On

RewriteCond {$QUERY_STRING} category=(\w+)&city=(\w+)$
RewriteRule ^search.php$ http://www.mynewsite.fak/$1 [R=301, L]

答案 1 :(得分:0)

这似乎对我有用:

RewriteCond%{QUERY_STRING} category = restaurant(。*)& city = Montreal

RewriteRule ^ search.php $ http://www.fakesite/data/testing/search.php [P,QSA]

感谢newfurniturey。