2016-11-22 66 views
0

这是我的设置。 我有example.com,它有文件和子目录。其中一个文件是maintenance.php,其中一个目录是/ admin。我试图将example.com的所有请求重定向到example.com/maintenance.php,除example.emaintenance.php外(不这样做会导致错误)以及example/admin中的所有页面。 example.com/file1应该重定向到example.com/maintenance.php,example.com/maintenance.php不应该导致任何错误,并且example.com/admin/file1不应该重定向。如何使用htaccess重定向除1个目录和1个文件以外的所有目录?

这就是我,我不能去上班:

RewriteEngine On 
RewriteCond %{REQUEST_URI} !(.*)admin.* 
RewriteCond %{REQUEST_URI} !^/maintenance.php$ 
RewriteRule .* /maintenance.php [R=302,L] 

example.com/admin仍然重定向到example.com/maintenance.php

感谢所有

+0

即使答案不适合你,你也应该回应。 – Walf

回答

-1

确保您的example.com/admin网址不是404 Not Found。当服务器尝试重定向到错误文档时,它将重定向到maintenance.php,因为错误文档不会从重定向中排除。为避免这种情况,您可以添加一个排除错误文档的RewriteCond规则。例如:

RewriteEngine On 

#Exclude *admin* and /maintenance.php 
RewriteCond %{REQUEST_URI} !.*admin.* 
RewriteCond %{REQUEST_URI} !^/maintenance\.php$ 

#This handles both 404 and 500 Errors 
RewriteCond %{REQUEST_URI} !^/path/to/(404|500)\.html$ 

RewriteRule .* /maintenance.php [R,L] 

我也避开了路径中的小点,因为这样做很好。 (避免维护xphp也不重定向。)

0

当您的站点不可用时,切勿使用外部重定向;你需要设置一个503头,否则你可能会毁掉你的搜索引擎排名。

留下任何现有的重写规则独自一人,和所有的人之前,补充一点:

RewriteRule ^(?!maintenance\.php$|admin(?:$|/)) maintenance.php [NS,L] 

maintenance.php第一线应该是

<?php 
header($_SERVER['SERVER_PROTOCOL'] . ' 503 Service Unavailable'); 

它仍然可以拥有的内容。

如果您仍然无法进入管理员,您至少可以看到还有哪些网址需要列入白名单。您可能还需要排除媒体,CSS和/或js目录。

完成后,下一次将该规则注释为#

相关问题