【问题标题】:How do I redirect with htaccess all but 1 directory and 1 file?如何使用 htaccess 重定向除 1 个目录和 1 个文件之外的所有内容?
【发布时间】:2016-11-22 13:31:31
【问题描述】:

这是我的设置。 我有 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

谢谢大家

【问题讨论】:

  • 即使答案不适合您,您也应该回复。

标签: php .htaccess redirect mod-rewrite


【解决方案1】:

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

保留任何现有的重写规则,并将其添加到所有规则之前:

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

maintenance.php 的第一行应该是

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

它仍然可以有内容。

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

完成后,下次使用# 注释掉规则。

【讨论】:

    【解决方案2】:

    确保您的 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]
    

    我也避开了路径中的点,因为这样做是个好习惯。 (避免维护Xphp 也不重定向。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      • 2016-02-25
      • 2015-06-27
      • 2013-09-23
      • 1970-01-01
      相关资源
      最近更新 更多