2

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

我正在尝试创建一个重写规则,将所有旧博客文章映射到他们的新 URL。

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

但没有任何工作。

如果 URL 中没有更多内容,我的 .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]

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

4

2 回答 2

3

您要删除前导斜杠:

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---^

并制作+a *。通过 htaccess 文件中的规则发送的 URI 的前导斜杠被剥离,因此^/(.+)$永远不会匹配。

于 2013-09-27T17:06:13.293 回答
3

将您的规则替换为:

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

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

于 2013-09-27T17:06:33.570 回答