将旧的.html页面重定向到新的没有html扩展名的页面?

5

我刚刚在我的WordPress网站上更改了永久链接。

我的旧链接是这样的,

http://www.sitename.com/category/postname.html

现在有新的链接。
http://www.sitename.com/category/postname/

我在旧链接上遇到了404错误,如何使用.htaccess将所有.html页面重定向到新的非.html页面?
3个回答

9
在您的文档根目录中的htaccess文件中,在WordPress规则之前添加以下内容:
RedirectMatch 301  ^/([^/]+)/([^/.]+)\.html$ /$1/$2/
RedirectMatch 301  ^/([^/]+)/([^/]+)/([^/.]+)\.html$ /$1/$2/$3/

如果您需要通过主机进行限制,可以使用mod_rewrite:
RewriteCond %{HTTP_HOST} sitename.com [NC]
RewriteRule ^([^/]+)/([^/.]+)\.html$ /$1/$2/ [R=301,L]

RewriteCond %{HTTP_HOST} sitename.com [NC]
RewriteRule ^([^/]+)/([^/]+)/([^/.]+)\.html$ /$1/$2/$3/ [R=301,L]

非常感谢,它正在正常运行,那么子类别页面sitename.com/category/subcategory/page.html转到sitename.com/category/subcategory/page/怎么样? - John Rock
太好了。非常感谢你。哪一个对于SEO更好?按主机限制还是其他方法? - John Rock
@JohnRock 没有区别。仅在同一文档根目录中为多个主机提供服务时才需要限制主机。例如,您有一个名为 wordpress.site.com 的站点和另一个名为 blog.blogsite.org 的站点,两者都托管在同一文档根目录中,但您不希望博客站点受到影响,您将使用 RewriteCond 仅使规则适用于第一个主机。 - Jon Lin
嗨Jon,我无法让https://george.doig.com.au/eulogy.html正常工作。我在.htaccess中有以下内容:http://pastebin.com/1R9KviY8 -该站点是子域多站点。 - Steve
@JonLin,如果我在子域上测试,似乎这个不起作用。 - Razvan Cuceu
我刚刚在我的WP网站上尝试了第一种方法,它在前端内容(页面/博客文章)上运行良好,但它阻止我访问/wp-admin并出现404页面未找到的错误。 - philip

1
在htaccess文件中,只需放置以下内容:

Redirect 301  /postname.html  http://www.sitename.com/category/postname/

0

上面的被接受答案来自Jon Lin,但对我造成了一些问题。这是我的结果,它运行良好,并且更加紧凑。

它适用于路径中有或没有目录的情况。

一行代码:

RedirectMatch 301  ^/(.*)\.html$ /$1

或者如果您需要它受主机限制:

RewriteCond %{HTTP_HOST} myDomain.com [NC]
RewriteRule ^(.*)\.html$ /$1 [R=301,L]

例子: 输入图像描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接