我正在重组一个网站,其中包含大量目前停放在此网址的内容。
http://string.domain.com/year/month/dd/string-pulled-from-title
出于各种原因,我想将所有新内容都停放在看起来像这样的网址
http://www.domain.com/blogs/string/year/month/dd/string-pulled-from-title
我想对未来的内容做出改变,但不要让所有旧的东西都去404.
我相信我的htaccess中的301重定向规则可以解决问题,将通过旧链接传入的所有引用流量发送到新格式。
但这条规则应该是什么样的?我已经阅读了一些教程,但在任何示例中都没有找到这个确切的案例。
注意,我不想对所有子域执行此操作,仅针对大约10个特定子域。因此,如果有人可以帮我找出其中的一个,那么我可以在我的htaccess中为每个子域复制粘贴10次并进行设置。
答案 0 :(得分:4)
将其放入旧网站的.htaccess
文件中(将域名调整为您的实际网址):
RewriteEngine On
RewriteRule ^(.*)$ http://example.com/blogs/string/$1 [R=301]
这将抓住旧网站上的这部分网址:
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
检查以确保请求的网址 不包含前导www
,如果目标网址本身可能导致无限重定向包括www
,并尝试重定向该子域名。
%1
grabs the first capture group from the line above。$1
引用同一行上的第一个捕获组。