我有一个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>
我有两个问题:
如果我注释掉第一个区块,那么新线路仍然不允许我访问,请说/mydirectory/foo.html
- WP重定向到/missing/
。我无法解决原因。
我不确定如何合并这两套规则。即,/mydirectory/
中的任何内容都像以前一样被访问,但是以.html
结尾的所有其他网址都应该重写为/filename/
,并且WP的其他内容正常工作。
答案 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>