使用 .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 重定向的主要内容,如果未能解决你的问题,请参考以下文章