子域名的htaccess重定向 - >同名的子目录?

时间:2009-08-07 10:42:53

标签: .htaccess http-status-code-301

我正在重组一个网站,其中包含大量目前停放在此网址的内容。

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次并进行设置。

1 个答案:

答案 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,并尝试重定向该子域名。