Htaccess 用于重定向不存在的子页面

Htaccess for redirect of non-existing subpages

对于我刚刚重新启动的网站,我希望 htaccess 重定向捕获 /blog/ 下所有不存在的子页面,只指向 /blog/ 而不是 404(所以 /blog/old-page/只会重定向到 /blog/)。然而,仍然存在的子页面(例如 /blog/new-page/)不会被重定向,这一点很重要。如果它可以在根 htaccess 文件中(而不是在子文件夹中),那也是最好的。我觉得我已经尝试了所有方法,但如果不对每个旧子页面(>100)进行重定向,就找不到解决方案! 希望有人能帮忙。

如果您所有的旧页面 URL 都是 /blog/<old-page>/ 形式并且之前映射到物理目录(从中提供 DirectoryIndex 文档),那么您可以使用 mod_rewrite 在根 .htaccess 文件的顶部:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(blog/)[^/]+/$ / [R=301,L]
substitution 字符串中的

</code> 是对 <code>RewriteRule pattern 中第一个捕获组的反向引用, IE。 “博客/”。这简单地节省了重复。

旁白: 只是重复评论中表达的担忧。关于 SEO 和用户,这可能比解释缺失页面的自定义 404 响应更糟糕。无论如何,搜索引擎可能会将此(多对一重定向)视为软 404,并且当用户看到不同的内容时,他们更有可能只是“困惑”(和 bounce)他们在期待什么。 “旧”到“新”(一对一)301 重定向确实无可替代。