尝试将blog.domain.com重定向到www.domain.com/blog/

时间:2013-09-27 16:56:21

标签: apache .htaccess mod-rewrite url-rewriting

我正在将www.domain.com上的主站点和blog.domain.com上的旧wordpress博客合并为一个全新的Wordpress安装。我已经导出并导入了所有旧的博客帖子,以便它们现在位于wwww.domain.com/blog //

我正在尝试创建一条重写规则,将所有旧博客帖子映射到新的网址。

我尝试过这些SO讨论的变体: DNS/.htaccess files to redirect subdomain to specific folder Apache rewrite rule different if capture is empty

但没有任何效果。

如果网址中没有其他内容,我的.htaccess文件中的以下内容会将blog.domain.com重定向到www.domain.com/blog:

RewriteCond %{HTTP_HOST} ^blog\.domain\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www\.blog\.domain\.com$ [NC]
RewriteRule ^/?$ http://www.domain.com/blog/$1 [R=301,L]

但是如果URL中还有其他内容,则根本不会重写URL,而是转到新的Wordpress网站的404页面。

我尝试将捕获添加到最终的RewriteRule行,但之后没有重写,它只是转到新的主页,但地址栏仍然显示为“blog.domain.com”:

RewriteCond %{HTTP_HOST} ^blog\.domain\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www\.blog\.domain\.com$ [NC]
RewriteRule ^/(.+)$ http://www.domain.com/blog/$1 [R=301,L]

有没有办法做我想做的事情?

2 个答案:

答案 0 :(得分:2)

您想要删除前导斜杠:

RewriteCond %{HTTP_HOST} ^blog\.domain\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www\.blog\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/blog/$1 [R=301,L]
# no slash---^

并使+成为*。通过htaccess文件中的规则发送的URI会删除前导斜杠,因此^/(.+)$永远不会匹配。

答案 1 :(得分:2)

将您的规则替换为:

RewriteCond %{HTTP_HOST} ^(www\.)?blog\.domain\.com$ [NC]
RewriteRule ^ http://www.domain.com/blog%{REQUEST_URI} [R=301,L]

PS:确保这是.htaccess中的第一条规则。