【问题标题】:strange behaviour by .htaccess.htaccess 的奇怪行为
【发布时间】:2012-03-21 11:59:59
【问题描述】:

我有以下 .htaccess 文件供我使用

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)-(.*)-offers.html$   current-offers.php?id=$2 [L] 
RewriteRule ^(.*)-(.*).html$   vpn-offer-detail.php?id=$2 [L]
RewriteRule ^(.*)-(.*)-details.html$   vpn-provider-detail.php?id=$2 [L]

我实际上是在尝试通过 htaccess 文件实现 SEO 友好的 URL。当我将文件上传到我的 web 目录中时,我遇到了一些奇怪的事情。

看起来重写规则 1(针对优惠)是可以的,条件 2 也可以,

但是,来到条件 3,(vpn provider detail.php),一个混乱正在发生.. 浏览器正确显示 url,但显示的页面内容不是 vpn provider.php。而是显示条件一的内容(当前 offer.php)。我不明白为什么会发生这种情况。请注意,浏览器中应按原样显示 URl,但页面内容是 current_offers.php(重定向到它,但不显示内容)

有人可以指导我吗?并告诉我我的代码有什么问题?或者为什么这会发生在我身上?

谢谢..

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    这是顺序问题。

    Hide-My-Ass-1009-details.html 没有通过第一个条件,但通过了第二个条件并带有 [L] - 这意味着最后 - 它适用于这个条件。

    一个快速的解决方案应该是

    Options +FollowSymLinks
    RewriteEngine on
    RewriteRule ^(.*)-(.*)-offers.html$   current-offers.php?id=$2 [L] 
    RewriteRule ^(.*)-(.*)-details.html$   vpn-provider-detail.php?id=$2 [L]
    RewriteRule ^(.*)-(.*).html$   vpn-offer-detail.php?id=$2 [L]
    

    【讨论】:

    • 感谢兄弟的指导。你能告诉我条件出现顺序背后的逻辑吗?这可能看起来是一个愚蠢的问题,但我真的在考虑它。重定向只会在满足条件时发生,那么为什么顺序很重要?
    • 如您所说,它在满足条件时重定向。 RewriteEngine 正常读取它(从上到下)。使用您的原始版本和 Hide-My-Ass-1009-details.html,它会读取第一个正则表达式并发现它不起作用。然后,它转到第二个 (^(.*)-(.*).html$) 并看到它有效。它读取 [L],因此不再读取此请求的规则。因此,需要第二个重定向。您的条件(带有 [L] 和所有)可以读取 if-elseif-else。
    猜你喜欢
    • 2012-10-19
    • 2014-05-03
    • 2017-08-06
    • 1970-01-01
    • 2011-07-02
    • 2020-11-06
    • 2016-03-05
    • 1970-01-01
    相关资源
    最近更新 更多