我想在线升级我的网站,我想向访问者显示维护页面直到升级完成。
我试过这个代码
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]