【问题标题】:Stuck in a redirect loop from RewriteCond/RewriteRule in .htaccess卡在 .htaccess 中的 RewriteCond/RewriteRule 的重定向循环中
【发布时间】:2014-09-24 16:12:57
【问题描述】:

我正在尝试为我的网站创建维护页面,并将以下内容添加到 .htaccess

##SETTINGS##
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
Allow From All

RewriteCond         %{REMOTE_ADDR}      !^00\.00\.00\.00
RewriteCond         %{REQUEST_URI}      !\.(jpe?g?|png|gif|css) [NC]
RewriteCond         %{REQUEST_URI}      !^/maintenance.php [NC]
RewriteRule         .*                  /maintenance.php [R=302,L]

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access 1 week"
</IfModule>

## ADDITIONAL REWRITE RULES BELOW HERE ##

这适用于我的本地 MAMP 环境,但是当我将其上传到我的托管服务提供商 (GoDaddy) 时,它会陷入无限重定向循环并且无法加载维护页面。将第一行更改为我自己的 IP 地址允许我访问该站点(按预期),但其他人仍然卡在重定向循环中。

我按照moz.com 的指南进行了一些更改,以便在维护页面上加载图像和 css。

请帮助有需要的n00b...

编辑:添加了我的 .htaccess 的顶部,所以人们不会认为这就是它不起作用的原因

EDIT2:根据要求添加了所有其他重定向规则

EDIT3:删除了与问题无关的其他重定向规则

【问题讨论】:

  • 你还有哪些重写规则?
  • 所有其他重写工作正常,我看不到任何会导致重定向循环的内容。

标签: php apache .htaccess mod-rewrite redirect


【解决方案1】:

说实话,这些规则看起来很正确。事实上,除了在本地运行它们之外,您还可以随时使用 http://htaccess.madewithlove.be/ 之类的东西对它们进行 lint 处理

在这种情况下,我建议您就该问题与 GoDaddy 联系。他们可能为您的帐户设置了另一个全局配置,这会影响您的规则。

【讨论】:

  • 我可能不得不硬着头皮给 Godaddy 打个电话,等待的时间……
【解决方案2】:

规则看起来不错,但我的猜测是您的其他规则正在重定向回maintain.php 以外的其他内容,或者您​​的maintenance.php 文件正在重定向到某个地方。尝试在Allow From All 行的正下方添加:

RewriteRule ^maintenance.php - [L]

这样您的其他规则就不会被应用。

【讨论】:

  • 这里的问题是我也被重定向到maintenance.php。理想情况下,我仍然需要能够在维护期间访问该站点。
  • @UndeadGeek 此规则不会重定向任何内容。它只是说“如果 URL /maintenance.php,不要做任何事情”
  • @UndeadGeek 看起来这些规则不会导致重定向循环。您确定maintenance.php 中的某些内容没有重定向吗?
  • 添加规则后,我仍然被重定向到维护页面,即使我的 IP 是在第二个 RewriteCond 中指定的。在maintenance.php 中也没有任何内容,只有这些头文件: header("HTTP/1.1 503 Service Temporarily Unavailable"); header("状态:503 服务暂时不可用"); header("Retry-After: 3600");
  • 我现在似乎已经通过删除 RewriteRule 上的 [R] 标志来修复它,不过感谢您的帮助。 :)
【解决方案3】:

移除 RewriteRule 上的 [R] 标志已修复重定向循环。我还必须删除页面名称之前的正斜杠,因为一旦我删除了 [R] 标志,由于 RewriteBase 已设置为“/”,这会创建服务器错误。

维护页面现在可以正确显示,我可以从自己的 IP 地址访问整个站点。

改变了

RewriteRule    .*    /maintenance.php [R=302,L]

RewriteRule    .*    maintenance.php [L]

猜猜这一定是一些奇怪的 GoDaddy 设置,至少它让我不用打电话给他们......

感谢 Chris 和 Jon Lin 的帮助 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多