【问题标题】:mod_rewrite always uses index.phpmod_rewrite 总是使用 index.php
【发布时间】:2015-12-28 18:49:41
【问题描述】:

我正在重建我的一个网站(重新设计 + pdo 而不是常规的 mysql)。 到目前为止一切顺利,除了 .htaccess 中的 1 个 RewriteRule 之外,一切正常。

我所有的 url 重写都符合这种规则:

RewriteRule pages/(.*)/ index.php?type=page&page=$1&%{QUERY_STRING}
RewriteRule pages/(.*) index.php?type=page&page=$1&%{QUERY_STRING}

(注意:利用index.php)

对于我的购物车,我想使用一个干净、独立的页面,并遵循以下规则:

RewriteRule ^shop/shopping-cart-overview/$ /pages/shoppingcart/overview.php
RewriteRule ^shop/shopping-cart-overview$ /pages/shoppingcart/overview.php

问题:不是使用文件“/pages/shoppingcart/overview.php”,而是像其他规则一样使用index.php。

我上传了完整的 txt 格式的 htaccess,所以你可以自己阅读: www.mymobisite.be/htaccess.txt

提前感谢您的时间、帮助和建议!

汤姆五世

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

    问题在于规则的顺序。 shop/shopping-cart 位于 pages 规则之前。 第一条规则将shop/shopping-cart-overview/ 重写为/pages/shoppingcart/overview.php,然后又将其重写为index.php?type=page&page=shoppingcart/overview.php

    您应该重新排序重写规则或使用[L] 修饰符(L=last)。

    RewriteRule ^shop/shopping-cart-overview/$ /pages/shoppingcart/overview.php [L] 
    RewriteRule ^shop/shopping-cart-overview$ /pages/shoppingcart/overview.php [L] 
    

    【讨论】:

    • 感谢您的快速回复。我尝试将此规则放在最后一行/尝试添加 L 修饰符,但两者似乎都不起作用......
    • 我重命名了 /pages/ 所以它不会像你说的那样覆盖,现在它可以工作了:) 谢谢你的回答@lorenz
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 2011-08-10
    • 1970-01-01
    相关资源
    最近更新 更多