.htaccess 如何使用htaccess重定向除1个目录和1个文件之外的所有目录和文件?

dwbf0jvd  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(122)

这是我的设置。我有example.com,它有文件和子目录。其中一个文件是maintenance.php,其中一个目录是/admin。我正在尝试将所有请求从www.example.com重定向到example.comexample.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
谢谢大家

liwlm1x9

liwlm1x91#

当您的网站不可用时,不要使用外部重定向;你需要设置一个503标题,否则你可能会杀死你的搜索引擎排名。
保留任何现有的重写规则,并在所有规则之前添加以下内容:

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

字符串
maintenance.php的第一行应该是

<?php
http_response_code(503);


它仍然可以有内容。
如果你仍然不能进入管理,你至少可以看到其他网址需要白名单。你可能还需要排除media、css和/或js目录。
完成后,用#注解掉该规则,以便下次使用。

xt0899hw

xt0899hw2#

请确保您的example.com/admin URL不是404 Not Found。当服务器试图重定向到错误文档时,它将重定向到maintenance.php,因为错误文档没有被排除在重定向之外。为了避免这种情况,您可以添加一个排 debugging 误文档的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不重定向。

相关问题