.htaccess RewriteRule参数

时间:2012-12-05 18:12:05

标签: php .htaccess mod-rewrite

我有一个简单的.htaccess文件:

RewriteEngine on
RewriteRule ^(.+)-([0-9]+)\.html$ book.php?title=$1&id=$2
RewriteRule ^(.+)\.html$ search.php?search=$1

如果用户输入“ php-for-dumies-10.html ”,则会将其作为“ book.php?title = php-for-dummies& id = 10 ”。这很好。

如果用户输入“ phpbook.html ”,则会将其作为“ search.php?search = phpbook ”投放。这也很好。

问题是,如果用户输入“ book.php?title”的“目录/ php-for-dumies-10.html ”(在URL中添加目录) =目录/ php-for-dumies& id = 10 “正如预期的那样,我正在” search.php?search = book.php / php-for-dumies-10

为什么第二个RewriteRule执行而不是第一个?是因为我加了一个斜线?更重要的是,“ book.php / php-for-dummies-10”参数来自哪里?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

RewriteEngine on
RewriteRule ^(.+)-([0-9]+)\.html$ book.php?title=$1&id=$2 [L]
RewriteRule ^(.+)\.html$ search.php?search=$1 [L]

实际上,两个重写都在执行。通过添加[L]标志,它可以防止后续规则的执行。如果匹配,这应该仅强制执行第一个规则。