陷入.htaccess中RewriteCond / RewriteRule的重定向循环

时间:2014-09-24 16:12:58

标签: php apache .htaccess mod-rewrite redirect

我正在尝试为我的网站创建维护页面,并将以下内容添加到.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:删除了与问题无关的其他重定向规则

3 个答案:

答案 0 :(得分:0)

说实话,这些规则看起来非常正确。实际上,除了在本地运行它们之外,您总是可以使用http://htaccess.madewithlove.be/

之类的东西对它们进行lint

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

答案 1 :(得分:0)

规则看起来很好,但我的猜测是你的其他规则要么重定向到maintenance.php以外的东西,要么你的maintenance.php文件重定向到某个地方。请尝试在Allow From All行下方添加此内容:

RewriteRule ^maintenance.php - [L]

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

答案 2 :(得分:0)

删除RewriteRule上的[R]标志已修复重定向循环。我还必须在页面名称之前删除正斜杠,因为RewriteBase已经被设置为&#34; /&#34;,因为我删除了[R]标志后创建了服务器错误。

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

更改

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

RewriteRule    .*    maintenance.php [L]

猜猜它一定是一些奇怪的GoDaddy设置,至少它让我省去了它们......

感谢Chris和Jon Lin的帮助:)