我有一个简单的.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”参数来自哪里?
感谢您的帮助。
答案 0 :(得分:2)
RewriteEngine on
RewriteRule ^(.+)-([0-9]+)\.html$ book.php?title=$1&id=$2 [L]
RewriteRule ^(.+)\.html$ search.php?search=$1 [L]
实际上,两个重写都在执行。通过添加[L]标志,它可以防止后续规则的执行。如果匹配,这应该仅强制执行第一个规则。