有人请告诉我这个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/"
答案 0 :(得分:1)
按顺序应用重写规则。在这种情况下,首先测试/search/(.*)/(.*)/$
,实际 匹配/search/windows/app/1/
,因为点运算符匹配所有内容,包括正斜杠。
尝试切换规则的顺序,或者更好的是,通过将(.*)
更改为([^/]*)
来使它们独立,这意味着匹配所有内容,除了正斜杠。这将使/search/windows/app/1/
的第一次测试失败,因此apache将继续进行第二次测试。