使用 htaccess 将所有子页面重定向到主页面

Redirect all subpages to main page using htaccess

我想将所有子页面重定向到主页。我尝试使用代码:

RewriteEngine On
RewriteRule .+ http://www.example.com [r=301,nc,l]

除包含问号的子页面外,所有子页面都被重定向,例如,http://www.example.com/?123 不被重定向。如何修改我的代码以重定向这些 URL?

您需要使用查询字符串重定向任何 non-empty URL-path 或主页(空 URL-path)。您还应该 删除 查询字符串作为重定向的一部分(您的规则当前保留初始请求中的查询字符串)。

例如,尝试以下操作:

# Redirect everything to the homepage (same domain)
RewriteCond %{REQUEST_URI} ^/. [OR]
RewriteCond %{QUERY_STRING} .
RewriteRule ^ http://www.example.com/ [QSD,R=301,L]

以上说明...对于所有 URL-path 而言,其中 URL-path 至少包含一个字符(在初始斜杠之后)或包含一个查询字符串,然后重定向到根。

QSD 标志从请求中丢弃原始查询字符串。

规则中的 NC 标志是多余的,因为无论如何您都没有匹配特定的字母。

旁白: 但是,我会质疑这样做的动机。搜索引擎 (Google) 会将大量重定向到主页视为 soft-404,因此这样做对 SEO 没有任何好处,如果用户正在关注之前的 link,这通常会让他们感到困惑存在。在这种情况下,有意义的 404 响应通常是首选。


更新:

If i would like to use this code also to redirect to other domain what should i change or add to redirect also main page?

假设另一个域也指向不同的服务器,那么您只需删除上述规则中的两个 条件 即可重定向 everything 并删除查询字符串。

例如:

# Redirect everything to the homepage on an external domain
RewriteRule ^ http://www.example.com/ [QSD,R=301,L]

试试这个,它适用于我的 ERP 系统。

RewriteRule ^(.*)$ http://www.example.com/ [L,R=301]