【问题标题】:Trying to redirect blog.domain.com to www.domain.com/blog/试图将 blog.domain.com 重定向到 www.domain.com/blog/
【发布时间】:2013-09-27 16:56:20
【问题描述】:

我正在将 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]

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

【问题讨论】:

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


    【解决方案1】:

    您要删除前导斜杠:

    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 的前导斜杠被剥离,因此 ^/(.+)$ 永远不会匹配。

    【讨论】:

    • 哇。 2个正确答案同时出现。在我看到这些答案之前,我实际上做了最后一次搜索并找到了类似于 Jon Lin 的解决方案。如果可以的话,我会接受他们两个。
    【解决方案2】:

    将您的规则替换为:

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

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

    【讨论】:

      猜你喜欢
      • 2011-10-23
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多