繁体   English   中英

除了1个目录和1个文件外,我如何用htaccess重定向?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM