![.htaccess 重定向 301 - 单页运行正常,但主页不行](https://linux22.com/image/764267/.htaccess%20%E9%87%8D%E5%AE%9A%E5%90%91%20301%20-%20%E5%8D%95%E9%A1%B5%E8%BF%90%E8%A1%8C%E6%AD%A3%E5%B8%B8%EF%BC%8C%E4%BD%86%E4%B8%BB%E9%A1%B5%E4%B8%8D%E8%A1%8C.png)
我正在尝试将一些特定页面重定向到我的新网站上的新页面(这些重定向工作正常),最后重定向到我的主页或(甚至更好)我的主页和所有我没有单独重定向到我的新网站主页的页面。这是我的.htaccess
主页的样子:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Redirect 301 /url1 https://newurl1
Redirect 301 /url2 https://newurl2
Redirect 301 /url3 https://newurl3
A 尝试添加一行,Redirect 301 / https://newsite.com
但不起作用。我认为这与RewriteRule
我之前发现的内容有关?
感谢您的帮助
答案1
如果您已将整个站点迁移到新服务器/域,那么您可能不需要现有的# BEGIN/END WordPress
块 - 因此应该将其删除。
然后,您可以使用一系列 mod_aliasRedirect
指令(就像您之前所做的那样)和一个RedirectMatch
指令将其他所有内容重定向到新网站的主页。虽然可能只是一个例子,但您现有的Redirect
指令是严格无效的。该Redirect
指令是前缀匹配的,匹配后的所有内容都会复制到目标 URL 的末尾,因此不能使用它来将多个重定向到一个。这就是为什么我们需要RedirectMatch
在最后一部分使用指令,该指令与正则表达式匹配。
例如:
# Specific redirects
Redirect 301 /url1 https://new.example/newurl1
Redirect 301 /url2 https://new.example/newurl2
Redirect 301 /url3 https://new.example/newurl3
# Redirect everything else to the homepage
RedirectMatch 301 ^/ https://new.example/
请注意,如上所述,Redirect
指令是前缀匹配的,因此上述内容实际上会重定向/url1/something
到https://new.example/newurl1/something
。如果您担心这一点,则需要RedirectMatch
始终使用。或者使用 mod_rewrite。
由于该指令的前缀匹配特性Redirect
,如果您在源 URL 上省略了尾部斜杠,则应在目标上省略尾部斜杠。同样,如果您在源中包含尾部斜杠,则在目标上也包含尾部斜杠。否则,如果重定向多个 URL,您将获得格式错误的重定向。
建议不要混合使用 mod_rewrite 和 mod_alias 的指令,因为您可能会遇到意外冲突(因为它们不一定按照指令在配置文件中出现的顺序进行处理)。
参考:
- https://httpd.apache.org/docs/current/mod/mod_alias.html#redirect
- https://httpd.apache.org/docs/current/mod/mod_alias.html#redirectmatch
在旁边:不建议大量重定向到主页(多对一)。搜索引擎(例如 Google)可能会将此视为软 404(并在 GSC 中对此发出警告)。这会让没有看到他们期望的页面的用户感到困惑。通常,最好在新网站上重定向到相同的 URL,并提供自定义 404(如果内容已被删除),其中包含有关旧/缺失内容的信息以及指向主页和您网站上其他页面的适当链接。这为搜索引擎提供了更好的信号,并为用户提供了更有意义的响应。