3

我有一个简单的 .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 ”。这也很好。

问题是如果用户输入“ directory/php-for-dumies-10.html ”(在 URL 中添加一个目录)按预期获取“ book.php?title=directory/php-for-dumies&id=10 ” ,我得到“ search.php?search=book.php/php-for-dumies-10

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

感谢您的任何帮助。

4

1 回答 1

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

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

于 2012-12-05T18:16:46.923 回答