RedirectMatch或重写规则301重定向* .html到非扩展路径

时间:2014-03-14 20:49:23

标签: wordpress .htaccess mod-rewrite redirect

我到处搜索,包括SO,都找不到这个问题的答案:

我想设置301重定向,以便:

www.mysite.com/some-page.html

重定向到

www.mysite.com/some-page/

我在我的htaccess文件中使用了以下内容(它是一个WordPress网站):

RewriteEngine On
RedirectMatch 301 (.*)\.html$ $1

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

问题
如果我访问www.mysite.com/,则会重定向到www.mysite.com/index

(注意:如果我访问www.mysite.com/some-page.html可以正常工作并重定向到www.mysite.com/some-page/

有关如何使这项工作的任何建议?我确定我错过了一些明显的东西......

1 个答案:

答案 0 :(得分:1)

RedirectMatch是mod_alias的一部分,RewriteRule内容是mod_rewrite的一部分。两个模块将应用于处理管道的不同点处的相同URI。这意味着你不能告诉apache停止它做什么和重定向。无论如何,mod_rewrite部分仍然会被应用。

要解决这个问题,请坚持使用mod_rewrite代替:

RewriteEngine On
RewriteRule ^(.*)\.html /$1/ [L,R=301]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress