【问题标题】:How to prevent infinite redirect loop on htaccess?如何防止htaccess上的无限重定向循环?
【发布时间】:2013-10-18 16:13:05
【问题描述】:

我有这种情况:
所有像/sport.html这样的网址都隐藏了真正的网址/archive.php?action=search&section=sport

#This is the RULE:
RewriteRule ^([a-zA-Z_]+([a-zA-Z0-9_]+)?)(-([0-9]+))?\.html$ /archive.php?action=search&section=$1 [L]

现在我想隐藏真实的 url 和对页面 archive.php 的所有直接访问,但是我收到了这个规则的重定向循环错误:

RewriteRule ^archive\.php.*$ /404.html [F,NC,L]

【问题讨论】:

  • 谢谢我解决了两个建议:#THIS NOT MATCH 404 PAGE RewriteCond %{REQUEST_URI} !^404\.html$ RewriteRule ^([a-zA-Z_]+([a-zA -Z0-9_]+)?)(-([0-9]+))?\.html$ /archive.php?action=search&section=$1 [L] #THIS REDIRECT DIRECT ACCESS TO 404 RewriteCond %{THE_REQUEST} \ /archive\.php.* RewriteRule ^ /404.html? [R=301,L]

标签: php apache .htaccess mod-rewrite redirect


【解决方案1】:

我想你真正要找的不是这个:

RewriteRule ^archive\.php.*$ /404.html [F,NC,L]

显然,这会导致循环,因为您的第一条规则是重写为archive.php,而这条规则将其重写为其他内容,等等。

试试这个而不是上面的规则:

RewriteCond %{THE_REQUEST} \ /archive\.php
RewriteRule ^ /404.html [F,L]

或者,如果你想对它感兴趣:

RewriteCond %{THE_REQUEST} \ /archive\.php\?action=search&section=([^&\ ]+)
RewriteRule ^ /%1.html [R,L]

【讨论】:

    【解决方案2】:

    您必须确保您的第一条规则与404.html 不匹配。您可以为此使用RewriteCond。有关详细信息,请参阅the documentation

    RewriteCond %{REQUEST_URI} !^404\.html$
    RewriteRule ^([a-zA-Z_]+([a-zA-Z0-9_]+)?)(-([0-9]+))?\.html$ /archive.php?action=search&section=$1 [L]
    

    【讨论】:

    • 请注意,这修复了内部服务器错误,但它不会“隐藏”真实的 url。你需要一个重定向。您可以了解如何正确地做到这一点herehere
    【解决方案3】:

    由于Apache的系统,基本上这是不可能隐藏真实文件的。

    但是在您的archive.php 中,您可以测试当前URL 并将其重定向到sport.html,如果这不是“sports.html”。

    【讨论】:

    • 不,有可能。请参阅我在答案中链接的文档。
    猜你喜欢
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多