我正在重构一个网站,其中有大量内容目前停在像这样的 URL 上。
http://string.domain.com/year/month/dd/string-pulled-from-title
出于各种原因,我想将所有新内容存放在如下所示的 URL 中
http://www.domain.com/blogs/string/year/month/dd/string-pulled-from-title
我想对 future 的内容进行更改,但不希望所有旧内容都变成 404。
我相信我的 htaccess 中的 301 重定向规则可以解决问题,将所有引用的流量通过旧链接发送到新格式。
但是这条规则应该是什么样子的呢?我已经阅读了一些教程,但在任何示例中都没有找到这种确切的情况。
请注意,我不想对所有子域执行此操作,仅对大约 10 个特定子域执行此操作。因此,如果有人可以帮助我找出其中之一,那么我可以将其复制粘贴到每个子域的 htaccess 中 10 次并进行设置。
最佳答案
将其放入旧站点的 .htaccess
文件中(将域调整为您的实际域):
RewriteEngine On
RewriteRule ^(.*)$ http://example.com/blogs/string/$1 [R=301]
这将在旧站点上获取 URL 的这一部分:
year/month/dd/string-pulled-from-title
并将其重定向到新位置下的新站点:
blogs/string/year/month/dd/string-pulled-from-title
或者,如果您想要一些更可变的东西,而不必自定义修复每个
.htaccess
,请将其放入每个子域的文件中:RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.*).example.com
RewriteRule ^(.*)$ http://example.com/blogs/%1/$1 [R=301,L]
如果您重定向到同一个域,并且它包含 www ,请将重写规则调整为以下内容:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.*).example.com
RewriteCond %{HTTP_HOST} !^www.example.com [NC]
RewriteRule ^(.*)$ http://example.com/blogs/%1/$1 [R=301,L]
请注意第二个
RewriteCond
,它检查以确保请求的 URL 不 包含前导 www
,如果目标 URL 本身包含 www
并且会尝试重定向该子域,这可能会导致无限重定向。%1
grabs the first capture group from the line above 。 $1
引用同一行上的第一个捕获组。 关于.htaccess - htaccess 重定向子域-> 类似命名的子目录?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1244076/