Php .htaccess重写规则参数

Php .htaccess重写规则参数,php,.htaccess,mod-rewrite,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”,它将被用

我有一个简单的.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”。那也行

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

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

谢谢你的帮助

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

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

谢谢,这是正确的!现在我只是想理解为什么如果不使用[L]标志并输入(例如“phpbooks.html”或“php-for-dummies-10.html”),只执行一条重写规则。如果我添加一个目录(例如“/directorio/php-for-dummies-10.html”),那么这两个重写规则似乎都会执行。当然,有了[L]标志,这个问题得到了纠正,我只是想弄清楚。