.htaccess 重定向至维护页面

.htaccess 重定向至维护页面

我想在线升级我的网站,我想向访问者显示维护页面直到升级完成。

我试过这个代码

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.html$
RewriteCond %{REMOTE_HOST} !^888\.888\.888\.888

RewriteRule $ /maintenance.html [R=302,L]

但是此代码将所有页面重定向到maintenance.html,例如

www.domain.com 转到 Maintenance.html www.domain.com/sub/ 转到 Maintenance.html

我只想要根目录重定向而不是子目录,例如

www.domain.com 到 Maintenance.html

www.domain.com/sub 到 www.domain.com/sub

任何人都可以给我一些建议。

答案1

您可能忘记提到操作系统、Web 服务器和错误编号!如果是针对 Ubuntu Linux,为什么要选择困难的方法,而您可以轻松地使用ErrorDocument?。

如果可能的话,尝试一下

mkdir /var/www/errors
cd /var/www/errors
#Create your own error document pages with some message or directly copy or use your "maintenance" page
touch 503_error.html 404_error.html

vim /etc/apache2/apache2.conf
#Add the following in this file
Alias /errors /var/www/errors
ErrorDocument 404 /errors/404_error.html
ErrorDocument 503 /errors/503_error.html

Save & Quit
/etc/init.d/apache2 restart

答案2

在 RewriteRule 之前添加此行应该会忽略直接访问服务器上现有目录的访问者:

RewriteCond %{REQUEST_FILENAME} !-d

答案3

管理此问题的最简单方法是将您的更改RewriteRule为仅匹配要重定向的 URI。在这种情况下,通过在两端进行锚定:

RewriteRule ^$ /maintenance.html [R=302,L]

上述规则否定了其上方 %{REQUEST_URI} RewriteCond 的必要性。如果要将其放置在主配置中而不是文件中.htaccess,则应这样做:

RewriteRule ^/$ /maintenance.html [R=302,L]

由于您似乎在文件中执行此操作.htaccess,因此该指令匹配的模式RewriteRule不包含前导斜杠。这意味着当您执行此操作时:

RewriteRule $ /maintenance.html [R=302,L]

Location:头将作为

Location: http://www.example.com//maintenance.html`

请注意域名后面的双斜线。这没什么大不了的,在本例中主要是出于美观考虑,但它肯定会造成问题。最好这样做:

RewriteRule ^$ maintenance.html [R=302,L]

或这个:

RewriteRule ^$ http://www.example.com/maintenance.html [R=302,L]

相关内容