0

我有一个 .htaccess 文件,它为 SEO 目的重写 url

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

我在这里做错了什么?

4

2 回答 2

1

您的第二条规则对于您要查找的内容不正确。您正在请求两次捕获的结果,但只进行一次捕获。

试试这个:

RewriteRule ^search/([^/\.]+)/([^/\.]+)/?$ search.php?what=$1&where=$2 [L,NC,QSA]

编辑:你还需要改变你的规则。您的第一条规则捕获了所有内容,因此会丢弃第二条。

因此,如已建议的那样,交换它们并使用L标志。

于 2013-05-09T15:24:07.767 回答
0

您正在使用该[L]标志,这会导致 mod_rewrite 停止处理规则集

尝试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]
于 2013-05-09T14:49:46.183 回答