尝试将网站置于维护模式(302)-“重定向过多” htaccess问题

时间:2019-01-01 00:02:08

标签: .htaccess

我正在尝试通过使用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),尝试将其关闭以查看是否有效,不是。

2 个答案:

答案 0 :(得分:1)

在从网上收集了大量建议和样式之后,我终于找到了解决该问题的解决方案。

要将您域名的所有页面和子目录重定向到维护页面,请创建两个文件:

  1. maintenance.html(维护页面)

  2. 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>标志。

我意识到这不是正常的“需要维护的站点”类型的页面,但是,维护页面在理想情况下应链接到尽可能少的外部资源。为避免上述问题,但您也不想由于站点已关闭进行维护而无法显示维护页面本身!