【问题标题】:Redirect site with .htaccess but exclude two+ folders使用 .htaccess 重定向站点但排除两个以上文件夹
【发布时间】:2017-04-07 02:34:17
【问题描述】:

根据这个answer,您可以像这样从重定向中排除单个子文件夹:

RewriteEngine on
RewriteRule !^uploads($|/) http://example.com%{REQUEST_URI} [L,R=301]

如何扩展它以包含两个或多个单独的子文件夹?

【问题讨论】:

    标签: regex apache .htaccess redirect


    【解决方案1】:

    如果您打算使用这些规则重定向 Wordpress 站点,则必须将“index.php”包含在排除列表中,否则排除将不起作用 - 因为 Wordpress 通过 index.php 处理所有内容。

    这是一个使用 Wordpress 的示例,如果您想重定向域,但您仍然希望管理员能够登录到之前的 wp-admin 部分。作为一个额外的例子,sitemap_index.xml 也被排除在重定向之外。

    RewriteCond %{REQUEST_URI} !^/wp-admin($|/)
    RewriteCond %{REQUEST_URI} !^/wp-login.php$
    RewriteCond %{REQUEST_URI} !^/index.php$
    RewriteCond %{REQUEST_URI} !^/sitemap_index.xml$
    RewriteRule (.*) https://www.newdomain.com/$1 [R=301,L]
    

    【讨论】:

      【解决方案2】:

      您可以使用以下代码排除多个文件夹:

      RewriteEngine on
      RewriteCond %{REQUEST_URI} !^/test/
      RewriteCond %{REQUEST_URI} !^/my-folder/
      RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L]
      

      这会将所有不以文件夹 /test/ 或 /my-folder/ 开头的请求重定向到 newdomain.com。

      来源:基于来自here 的损坏代码。

      【讨论】:

      • 虽然这行得通,但我想知道是否可以在一行中完成
      【解决方案3】:

      如果您关注a different answer 来回答您引用的问题,可能会更易于阅读和维护。

      RewriteEngine on
      
      # Do not rewrite these directories
      RewriteRule ^(uploads) - [L]
      RewriteRule ^(second) - [L]
      
      # Rewrite all other URL
      RewriteRule (.*) http://example.com/$1 [L,R=301]
      

      【讨论】:

        猜你喜欢
        • 2011-03-25
        • 2017-05-31
        • 2023-03-23
        • 2021-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多