卡在.htaccess中的RewriteCond/RewriteRule的重定向循环中


Stuck in a redirect loop from RewriteCond/RewriteRule in .htaccess

我正试图为我的网站创建一个维护页面,并将以下内容添加到.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的顶部,这样人们就不会认为这就是不起作用的原因

编辑2:根据请求添加了所有其他重定向规则

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

老实说,这些规则看起来非常正确。事实上,除了在本地运行它们之外,您还可以使用以下方法对它们进行整理http://htaccess.madewithlove.be/

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

规则看起来不错,但我猜要么你的其他规则正在重定向回maintenance.php之外的其他内容,要么你的maintenancephp文件正在重定向到某个地方。尝试将其添加到Allow From All行的正下方:

RewriteRule ^maintenance.php - [L]

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

删除RewriteRule上的[R]标志已修复重定向循环。我还必须删除页面名称前的正斜杠,因为一旦我删除[R]标志,就会产生服务器错误,因为RewriteBase已经设置为"/"。

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

已更改

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

RewriteRule    .*    maintenance.php [L]

我想这一定是一些奇怪的GoDaddy设置,至少它省去了我给它们打电话。。。

感谢Chris和Jon Lin的帮助:)