[英]How do I redirect with htaccess all but 1 directory and 1 file?
这是我的设置。 我有example.com,其中包含文件和子目录。 这些文件之一是maintenance.php,而这些目录之一是/ admin。 我试图将所有请求从example.com重定向到example.com/maintenance.php(例如example.com/maintenance.php除外)(不这样做会导致错误),以及example / admin中的所有页面。 example.com/file1应该重定向到example.com/maintenance.php,example.com/maintenance.php不会引起任何错误,example.com / admin / file1不应重定向。
这是我无法上班的东西:
RewriteEngine On
RewriteCond %{REQUEST_URI} !(.*)admin.*
RewriteCond %{REQUEST_URI} !^/maintenance.php$
RewriteRule .* /maintenance.php [R=302,L]
example.com/admin仍重定向到example.com/maintenance.php
谢谢大家
当您的站点不可用时,切勿使用外部重定向; 您需要设置503标头,否则可能会破坏搜索引擎排名。
保留任何现有的重写规则,并在所有规则之前添加此规则:
RewriteRule ^(?!maintenance\.php$|admin(?:$|/)) maintenance.php [NS,L]
maintenance.php
的第一行应该是
<?php
header($_SERVER['SERVER_PROTOCOL'] . ' 503 Service Unavailable');
它仍然可以有内容。
如果您仍然无法进入管理状态,则至少可以查看需要将哪些其他URL列入白名单。 您可能还需要排除媒体,css和/或js目录。
完成后,下次用#
注释掉规则。
确保您的example.com/admin URL不是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]
我也躲过了路径中的点,因为这样做是一种好习惯。 (避免maintenanceXphp也不会重定向。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.