【问题标题】:301 redirect to new domain and redirect individual old pages at the same time301重定向到新域并同时重定向单个旧页面
【发布时间】:2013-10-17 07:19:37
【问题描述】:

希望您能帮我解决这个 301 问题。

简介

我刚刚发布了一个重新设计的网站,其中包含新的干净网址。旧网页的网址如下:www.domain.dk/Default.aspx?ID=66。新的网站网址如下所示:www.domain.com/contact

所以我不想将所有这些旧网址重定向到新网址,因此我不会保留旧网址,也无法应用一般规则。

这只是简单的 301 重定向,但同时旧域指向一个新域,我认为这就是事情变脏的地方。旧域是 www.domain.dk,但我不想 301 将所有流量都转到新域 www.domain.com,同时我不想进行所有单独的 301 重定向。

问题

当我点击 Google 中的链接 www.domain.dk/Default.aspx?ID=66 时,我会在我的浏览器中看到这个 URL:www.domain.comindex.php/ ?ID=66.

在其他链接上我得到 www.domain.comdefault.aspx/?ID=2

所以重定向到新域工作正常吗?但个别重定向根本不适用。

代码

这段代码是从我运行 apache 的服务器上的 .htaccess 文件中粘贴的。

第一个位由 Concrete5 CMS 自动生成以制作漂亮的 URL。

# -- concrete5 urls start --
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule . index.php [L]
</IfModule>
# -- concrete5 urls end --

这是我发现的代码,用于将所有流量 301 重定向到使用 www.esvagt.com 到 www.esvagt.com 的 的网址

## --- 301 Redirects --- ##

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com$1 [R=301,L]

这只是手动 301 重定向之一。

## General - Redirects ##

redirect 301 /Default.aspx?ID=66 http://www.domain.com/contact/contact-us

提前致谢。如果您需要更多信息,我很乐意提供。 我对在 .htaccess 中编写代码的知识,所以我很无能。我希望你能帮忙。 :)

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite concrete5


    【解决方案1】:
    1. 避免混合使用mod_rewritemod_alias 规则。
    2. 规则的顺序也很重要,所以先有 301 规则,然后有你的 catch all 控制器规则

    使用此代码进行 301 重定向:

    ## --- 301 Redirects --- ##
    
    RewriteEngine On
    
    RewriteCond %{HTTP_HOST} ^(www\.)?domain\.dk$ [NC]
    RewriteRule ^ http://www.domain.com%{REQUEST_URI} [R=301,L]
    
    ## General - Redirects ##
    
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+Default\.aspx\?ID=66[&\s] [NC]
    RewriteRule ^ http://www.domain.com/contact/contact-us? [R=301,L]
    
    # -- concrete5 urls start --
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME}/index.html !-f
    RewriteCond %{REQUEST_FILENAME}/index.php !-f
    RewriteRule . index.php [L]
    </IfModule>
    # -- concrete5 urls end --
    

    【讨论】:

    • 感谢您的快速回复!我马上试试。我应该在第 2 行写以 .dk 结尾的旧域,在第 3 行写以 .com 结尾的新域吗?还是它们都应该是 .com?
    • 查看编辑,现在您可以在第一条规则中相应地替换 .dk.com 域名。
    • 好的。非常感谢。粘贴您提供的代码并将所有域名更改为正确的。然而,重定向到domain.com/contact/contact-us 不起作用。我仍然在浏览器中得到domain.comindex.php/?ID=66
    • 啊哈。在 Safari 中完美运行。所以它需要一些时间才能在 Chrome(我通常使用的浏览器)中运行?我总共有大约 80 个重定向。我将如何以及在哪里写它们?
    • 好的。凉爽的。我现在明白了。看起来一切正常。非常感谢您的快速回复。非常感谢您的帮助。
    【解决方案2】:

    重写规则www.domain.dk/Default.aspx?ID=66 domain.com/contact/contact-us [R=301,L]

    如果您想自动重定向所有帖子:

    RewriteRule /Artical.aspx?ID=(.+?) domain.com/article-title-$1.html [R=301,L]
    or
    RewriteRule /Artical.aspx?ID=(.+?) domain.com/Post.aspx?ID=$1 [R=301,L]
    

    那么动态urlArtical.aspx?ID=20会被重定向到http://www.domain.com/article-title-30.html, 我成功将此方法应用于我的博客http://downloadapp.info

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-24
      • 2016-11-14
      • 1970-01-01
      • 2012-08-12
      • 2013-02-10
      • 1970-01-01
      • 2021-03-02
      相关资源
      最近更新 更多