【问题标题】:.htaccess RewriteRule parameters.htaccess 重写规则参数
【发布时间】:2012-12-05 18:12:05
【问题描述】:

我有一个简单的 .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" p>

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

感谢您的帮助。

【问题讨论】:

    标签: php .htaccess mod-rewrite


    【解决方案1】:
    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”)只会执行一个 RewriteRule。如果我添加一个目录(例如“/directorio/php-for-dummies-10.html”),那么两个 RewriteRules 似乎都会执行。当然,随着 [L] 标志得到纠正,我只是想弄清楚。
    猜你喜欢
    • 2018-02-03
    • 2013-12-26
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多