我需要帮助,而且需要尽快得到帮助。
我们最近迁移了一个子域名以便与该域名集成。
https://blog.example.com
例如。https://www.example.com/blog
https://blog.example.com
有大量的流量,我们不想失去它们。所以我们需要进行 301 重定向。
问题是,https://blog.example.com
有超过 200 个页面表现良好。
我需要建议如何将所有页面重定向到新位置的相应页面,而不会减慢网站速度或使服务器过载。
我们尝试了
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ https://example.net/$1 [L,R=301,NC]
但只有主页被重定向
我们是否必须逐一重定向每个页面?
答案1
我们尝试了
RewriteEngine on RewriteCond %{HTTP_HOST} ^example.com [NC,OR] RewriteCond %{HTTP_HOST} ^www.example.com [NC] RewriteRule ^(.*)$ https://example.net/$1 [L,R=301,NC]
您说您“最近迁移了一个子域名”,但是您发布的代码并不针对子域名,并且与您在问题中描述的示例主机名冲突?
如果您将其放在文件中错误的位置,这将重定向“仅主页面” .htaccess
。例如,如果您将其放在后对前端控制器进行内部重写。此重定向需要位于根.htaccess
文件的最顶部。
而不会减慢网站速度或增加服务器的负载。
200 个类似的 URL 重定向在性能/开销方面微不足道。但是,为了完全最小化这些重定向可能产生的所有影响,blog
子域应该指向文件系统的不同区域,这进一步简化了重定向。(事实上,您不需要将子域指向任何特定目录,而是直接在服务器配置/虚拟主机中执行重定向,而不是。.htaccess
)
然后,您可以使用单个 mod_aliasRedirect
指令(在.htaccess
或<VirtualHost>
容器中)执行“200 次重定向”。例如:
Redirect 301 / https://www.example.com/blog/
该Redirect
指令是前缀匹配的,匹配后的所有内容都会复制到目标 URL 的末尾。例如,http(s)://blog.example.com/anything
301 重定向到https://www.example.com/blog/anything
。
否则,如果你的子域名和主域名指向文件系统上的同一个位置,那么使用 mod_rewrite 来检查请求的主机名,就像你最初做的那样(虽然不确定你为什么要检查example.com
或者 www.example.com
当您应该检查子域名时blog.example.com
)。
例如,在非常顶部根.htaccess
文件:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^blog\.example\.com [NC]
RewriteRule (.*) https://www.example.com/$1 [R=301,L]
NC
由于正则表达式.*
已经匹配所有内容,因此该标志是多余的。
或者,REQUEST_URI
在指令中使用服务器变量RewriteRule
并避免反向引用。例如:
:
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]
服务器REQUEST_URI
变量已包含斜杠前缀。
首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。并确保在测试前已清除浏览器缓存。