我正试图为我的网站创建一个维护页面,并将以下内容添加到.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的帮助:)