我正在尝试通过使用htaccess将以(域名)开头的任何页面重定向到根目录内文件夹中的maintenance.php文件的方式将我的网页置于维护模式。 我让它可以在localhost上正常工作,但是当我将其放在Web主机服务器上时,它将无法正常工作。它一直在说重定向太多(正在进行无限循环)。
# MAINTENANCE-PAGE REDIRECT
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^100\.184\.54\.96
RewriteCond %{REQUEST_URI} !/maintenance/maintenance.php$ [NC]
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC]
RewriteRule .* /maintenance/maintenance.php [R=302,L]
</IfModule>
我尝试了很多其他问题的答案,例如
.htaccess error - ERR_TOO_MANY_REDIRECTS
htaccess maintenance page redirect results in "too many redirects" error ...等等。同样的错误不断出现。我有另一个域(域1)重定向到当前网页(域2),尝试将其关闭以查看是否有效,不是。
答案 0 :(得分:1)
在从网上收集了大量建议和样式之后,我终于找到了解决该问题的解决方案。
要将您域名的所有页面和子目录重定向到维护页面,请创建两个文件:
maintenance.html(维护页面)
maintenance.enable(空文件)
在.htaccess文件中使用以下代码:
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^105\.228\.123\.16
RewriteCond %{DOCUMENT_ROOT}/maintenance.html -f
RewriteCond %{DOCUMENT_ROOT}/maintenance.enable -f
RewriteCond %{SCRIPT_FILENAME} !maintenance.html
RewriteRule ^.*$ /maintenance.html [R=503,L]
ErrorDocument 503 /maintenance.html
Header Set Cache-Control "max-age=0, no-store"
请确保将2个文件放置在索引页所在的目录中。
这是适用于我的情况的解决方案。我尚未尝试使用外部资源(css / js文件和图像)进行尝试,但我认为不应该花太多时间来调整上面的代码。希望它也能帮助其他人。
编辑 对于外部资源和样式,只需添加以下行:
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif|css|js|ico)
请确保将所有相关目录(包含样式表和脚本)添加到与maintenance.html页面相同的目录中。
我可能是错的,但是如果您要使维护页面保持一段时间,将其与Header Set Cache-Control "max-age=0, no-store"
结合使用似乎是一个坏主意。我将其留给专家:-)
答案 1 :(得分:0)
我的维护页面是花哨的倒计时页面。
这实际上是问题的一部分。您的“精美”页面包含指向多个CSS和JS文件(以及favicon.ico
文件)的链接-总共17个文件-您的.htaccess
重定向也将重定向这些请求(全部重定向到您的{{1} }页面-将触发进一步的重定向等)。您需要为这些URL /文件扩展名设置其他例外。例如:
maintenance.php
不需要RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^100\.184\.54\.96
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif|css|js|ico)$
RewriteRule !maintenance\.php$ /maintenance/maintenance.php [R=302,L]
包装器(您知道服务器)。
除非您确实确实具有大小写混合的扩展名,否则不需要<IfModule mod_rewrite.c>
标志。
我意识到这不是正常的“需要维护的站点”类型的页面,但是,维护页面在理想情况下应链接到尽可能少的外部资源。为避免上述问题,但您也不想由于站点已关闭进行维护而无法显示维护页面本身!