htaccess中有多个重写规则

时间:2013-05-09 14:42:31

标签: .htaccess

我有一个.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

我在这里做错了什么?

2 个答案:

答案 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]