我们如何才能将超过 200 个页面进行 301 重定向到新位置对应的 200 个页面?

我们如何才能将超过 200 个页面进行 301 重定向到新位置对应的 200 个页面?

我需要帮助,而且需要尽快得到帮助。

我们最近迁移了一个子域名以便与该域名集成。

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/anything301 重定向到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(临时)重定向进行测试,以避免潜在的缓存问题。并确保在测试前已清除浏览器缓存。

相关内容