我在做什么错误的HTACCESS文件?

时间:2010-04-07 01:07:13

标签: php .htaccess mod-rewrite

有人请告诉我这个htaccess规则有什么问题吗?

 RewriteCond %{QUERY_STRING} ^q=(.*)&type=downway1$ [NC]
 RewriteRule ^search\.php$  /search\/%1\/1\/? [R=301,NC,L]

 RewriteCond %{QUERY_STRING} ^q=(.*)&type=(.*)$ [NC]
 RewriteRule ^search\.php$  /search\/%1\/%2\/1\/? [R=301,NC,L]

 RewriteRule search/(.*)/(.*)/$  /search.php?q=$1&page=$2 [L] <-- this and
 RewriteRule search/(.*)/(.*)/(.*)/$  /search.php?q=$1&type=$2&page=$3 [L] <-- this 

不能同时工作。例如TYPE = app Q = windows

如果我通过downway1搜索类型它有效,但如果我在应用程序类型中搜索,Q不仅会成为windows / app windows。请帮帮我!

编辑:即时尝试将"search.php?q=someterm&page=1"重定向到"/search/someterm/1/",将"search.php?q=someterm&type=sometype&page=1"重定向到"/search/sometype/someterm/1/"

1 个答案:

答案 0 :(得分:1)

按顺序应用重写规则。在这种情况下,首先测试/search/(.*)/(.*)/$,实际 匹配/search/windows/app/1/,因为点运算符匹配所有内容,包括正斜杠

尝试切换规则的顺序,或者更好的是,通过将(.*)更改为([^/]*)来使它们独立,这意味着匹配所有内容,除了正斜杠。这将使/search/windows/app/1/的第一次测试失败,因此apache将继续进行第二次测试。