使用 .htaccess 进行大规模 301 重定向

Posted

技术标签:

【中文标题】使用 .htaccess 进行大规模 301 重定向【英文标题】:Mass 301 redirect using .htaccess 【发布时间】:2011-03-21 16:55:50 【问题描述】:

我正在从事一个大型项目,该项目涉及获取数千 (30,000+) 个静态网页并将其转换为 CMS。

问题是其中许多页面在其目录中是重复的。我想通过使用 301 重定向来保持 SEO 完好无损,但是,我不确定如何进行如此大的重定向 (301)。

这是页面当前目录结构的示例。

/page.html /文件夹/page.html /文件夹/子文件夹/page.html /文件夹/子文件夹/另一个文件夹/page.html

如您所见,page.html 在所有目录中都有重复。

对于新的 CMS,该页面的 URL 将是 /page.html

【问题讨论】:

这是一篇很棒的关于重定向的文章,给出了来自多个 Web 服务器或方法的示例 stevenhargrove.com/redirect-web-pages 【参考方案1】:

工作示例,请访问:http://www.jakeisonline.com/***/3345518-mass-301-redirect/page.html

您应该被直接重定向到 /page.html

Options +FollowSymlinks
RewriteEngine on

RewriteRule ^(.*)page.html /page.html [R=301,NC]

这将始终使用 301 硬重定向将 http://www.foo.com/something/something/something/page.html 重定向回 http://www.foo.com/page.html。

重写规则通过查看 URL 来执行此操作,确定是否包含 page.html 之前的任何内容(不包括域本身),如果是,将 301 重定向。所以你可以从字面上使用任何子级别,只要它以 page.html 结尾,它就会重定向到根目录下的 /page.html。

如果您想知道[R=301,NC] 的含义,

 R // means simple redirect
 R=301 // means redirect with a 301 header
 NC // means no-case, or case insensitive
 L // can also be used to say 'ignore all the other rules after this'

【讨论】:

【参考方案2】:

试试这个规则:

RewriteRule ^([^/]+/)+page\.html$ /page.html [L,R=301]

或者对于任意的page.html

RewriteRule ^([^/]+/)+([^/]+)\.html$ /$2.html [L,R=301]

【讨论】:

以上是关于使用 .htaccess 进行大规模 301 重定向的主要内容,如果未能解决你的问题,请参考以下文章

301 重定向.htaccess

WordPress对url做重定向处理

301 使用 .htaccess 重定向 URL 模式

为啥我的 .htaccess 文件的 301 重定向不能正常工作?

htaccess 301 重定向新基础域名的通配符

.htaccess 中的 301 重定向