我有一个.htaccess文件,用于重写用于搜索引擎优化目的的网址
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /display.php?page=$1 [L,NC,QSA]
RewriteRule ^search/([^/\.]+)/?$ search.php?what=$1&where=$2 [L,NC,QSA]
现在第一个重写规则正常。 (www.domain.com/user转到display.php?page = user) 但第二个应该工作(www.domain.com/search/something/else必须去search.php?what = something& where = else
我在这里做错了什么?
答案 0 :(得分:1)
您的第二条规则对于您要查找的内容不正确。您正在请求两次捕获的结果,但只进行一次捕获。
请改为尝试:
RewriteRule ^search/([^/\.]+)/([^/\.]+)/?$ search.php?what=$1&where=$2 [L,NC,QSA]
编辑:您还需要切换规则。你的第一条规则捕获了所有内容,因此会丢弃第二条规则。
所以,交换它们,并按照建议使用L
标志。
答案 1 :(得分:0)
您正在使用[L]
标记causes mod_rewrite to stop processing the rule set。
尝试从第一个重写规则中删除L
标志,如下所示:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /display.php?page=$1 [NC,QSA]
RewriteRule ^search/([^/\.]+)/?$ search.php?what=$1&where=$2 [L,NC,QSA]