【问题标题】:Exclude directory from WordPress htaccess AND redirect old .html files从 WordPress htaccess 中排除目录并重定向旧的 .html 文件
【发布时间】:2014-11-08 16:34:43
【问题描述】:

我有一个 WordPress 安装,它正在替换旧网站。旧(Movable Type)网站有.html 文件,我想将它们重定向到新的等价物。这可以将/foo.html 重定向到/foo/

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule (.+)\.html$ /$1/ [L,R=301]
</IfModule>

但我想排除一些其他目录,这些目录包含来自 WordPress 的旧 .html 文件 - 以便仍然可以像以前一样访问它们。我从其他答案中看到,我可以将下面标记的行添加到 WordPress 的 .htaccess 语句中,以从重写中排除目录:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# NEW LINE:
RewriteCond %{REQUEST_URI} !^/(mydirectory|mydirectory/.*)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

我有两个问题:

  1. 如果我注释掉第一个块,新行仍然不允许我访问,比如 /mydirectory/foo.html - WP 重定向到 /missing/。我不知道为什么。

  2. 我不确定如何组合这两组规则。即,/mydirectory/ 中的任何内容都可以像以前一样访问,但所有其他以.html 结尾的 URL 都应重写为 /filename/,而 WP 的其他内容则正常工作。

【问题讨论】:

    标签: wordpress apache .htaccess mod-rewrite redirect


    【解决方案1】:

    这样吧:

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    
    # NEW RULE to ignore rewriting for anything in mydirectory
    RewriteRule ^mydirectory(/.*)?$ - [L,NC]
    
    RewriteRule ^(.+?)\.html$ /$1/ [L,R=301,NC]
    
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php [L]
    </IfModule>
    

    【讨论】:

    • 感谢 anubhava,这似乎可以解决问题!我永远不会自己到达那里。
    猜你喜欢
    • 1970-01-01
    • 2018-04-26
    • 2022-01-20
    • 2022-11-27
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    相关资源
    最近更新 更多