从WordPress htaccess中删除目录并重定向旧的.html文件

时间:2014-09-15 07:52:58

标签: wordpress apache .htaccess mod-rewrite redirect

我有一个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结尾的所有其他网址都应该重写为/filename/,并且WP的其他内容正常工作。

1 个答案:

答案 0 :(得分:2)

这样做:

<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>