2009-12-22 135 views
159

我将使用哪个重定向规则将所有页面重定向到olddomain.com以重定向到newdomain.com.htaccess将所有页面重定向到新域

该网站有一个完全不同的结构,所以我想每一页下的旧域名重定向到新域索引页。

我认为这会做(base目录下olddomain.com):

RewriteEngine On 
RewriteRule ^(.*)$ http://newdomain.com/ [R=301] 

但如果我浏览到olddomain.com/somepage我重定向到newdomain.com/somepage。我预计只有newdomain.com没有页面后缀的重定向。

如何保留最后部分?

+6

为了节省时间,向下滚动到正确的最佳答案,即'RewriteEngine on''RewriteRule ^(。*)$ http://www.newdomain.com/$1 [R = 301,L]'* http:// stackoverflow.com/a/7578810/1066234 – 2015-10-20 11:10:30

+0

值得指出的是,特别是从SEO角度来看,将多对一重定向到索引/主页通常是一个坏主意。 Google很可能将其视为软404。 – MrWhite 2017-01-07 12:28:10

回答

124

可能是这样的:

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_HOST} ^OLDDOMAIN\.com$ [NC] 
RewriteRule ^(.*)$ http://NEWDOMAIN.com [R=301,L] 
+1

即使删除$ 1 :)仍然没有好... – 2009-12-22 10:54:13

+0

嗯,你可以尝试重新加载你的浏览器?它甚至可以在这里用xampp重定向。我刚测试过。 – YOU 2009-12-22 10:58:50

+0

我的坏...它确实工作,我的托管服务有一些其他的重定向,这是fu ****东西了。谢谢! :) – 2009-12-22 10:59:03

61

只是为了澄清,删除后的主机重定向这是在路上,我原来的解决方案也可以工作:

RewriteEngine On 
RewriteRule ^(.*)$ http://newdomain.com/ [R=301] 
+0

这将重定向到默认索引,这是您的问题所在。只是为了清楚起见,因为由于邻近性,您的语句似乎是针对user968421的回答,user968421的答案在意图重定向到新域中的相应文件名时正确。 – RationalRabbit 2016-08-08 14:50:05

2

这是旧的错误版本的apache(以及mod_rewrite),其中路径前缀被添加到重写的路径,如果它改变了。 See here

我认为这是固定的Apache2 V2.2.12,有你需要使用,我将在这里补充时,我发现这一个特殊的标志,(我认为这是对NP没有路径)

RewriteRule ^(.*)$ http://newdomain.com/ [??] 
+0

我在这个问题上抨击了近一个月 – 2009-12-22 11:12:27

2

从可用性的角度来看它会更好,如果你也与发送请求的路径(即,你有什么此刻),让你的新网站处理它:

You searched for "/products".

Unfortunately this page is gone. Would you like to visit "/new_products" instead?

(和更好的是,仍然这样做是自动的。)

这显然是一个大型网站的编码和启发式算法,但在我看来,它会在用户满意度方面得到回报(当您精心保存的梦想产品书签将您引导至新网域的首页时。 COM,这是令人沮丧的)

+0

对于上述网站来说,这是非常不相干的,因为整个网站已经改变了,但你绝对正确。该网站应尽可能向后兼容。 +1 – 2009-12-22 11:46:13

340

在这里,网址,以在新的域名网址完全相同的副本,该域名在此之后一个重定向的一切:

RewriteEngine on 
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L] 

www.example.net/somepage.html?var=foo重定向到www.newdomain.com/somepage.html?var=foo

+18

不会重定向每个请求,但即使是那些newdomain.com?在这些情况下基本上会导致两个重复的请求? – 2013-08-02 17:02:01

+8

这应该被接受为最佳答案 – RSM 2013-12-09 21:00:48

+25

现在的问题是将所有内容重定向到主页 – kravits88 2014-01-23 00:23:30

9

如果你想从某个位置重定向t Ø子域,你可以使用:

Redirect 301 /Old-Location/ http://subdomain.yourdomain.com

+0

这是最好的方式。因为许多Webhoster不允许在.htaccess中使用RewriteEngine。无论如何,这很有效! – Sprinterfreak 2015-01-10 00:14:32

+0

您必须使用RewriteEngine重定向。您有问题的原因是RewriteEngine已经处于活动状态,您只需要重定向规则。我很高兴这有帮助。 – EmptySD 2015-01-11 05:31:49

+0

不正确。它跳过所有重写的事情,当使用'RewriteEngine On'时会引发500次内部错误。这是一个非常受限制的Web空间。使用'Redirect 301/http:// foo'是处理的唯一可能的方式。 – Sprinterfreak 2015-01-13 21:24:35

3

我作为符号连接解决方​​案,因此我在PHP中使用的。如果没有我的服务器上运行。

function curPageURL() { 
    $pageURL = 'http'; 
    if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";} 
    $pageURL .= "://"; 
    if ($_SERVER["SERVER_PORT"] != "80") { 
     $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"]; 
    } else { 
     $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]; 
    } 
    return $pageURL; 
} 
$redirect = str_replace("www.", "", curPageURL()); 
$remove_http_root = str_replace('http://', '', $redirect); 
$split_url_array  = explode('/', $remove_http_root); 


if($split_url_array[0] == "olddomain.com"){ 
    header("Location: http://www.newdomain.com/$split_url_array[1]"); 
    die(); 
} 
12

我用我的Wordpress博客作为.htaccess。它将http://www.blah.nl/asad,http://blah.nl/asad,http://www.blah.com/asad等转换为http://blah.com/asad 感谢所有其他答案,我明白了这一点。

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

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

RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 
+1

我认为这是所有问题中最全面的答案:它保留了每个页面的排名,并且是所有不是主要域名的域名的全部!有什么更好的? – nzn 2015-08-05 21:54:55

+1

这里的关键在于域重写规则来自WordPress的索引重写规则。 – MrMoxy 2016-06-15 04:36:39

1

使用带有Options -FollowSymLinksAllowOverride -Options有条件的重定向如果由主控器禁用几个本地文件也应该被送达:

样品的.htaccess

# Redirect everything except index.html to http://foo 
<FilesMatch "(?<!index\.html)$"> 
    Redirect 301/http://foo/ 
</FilesMatch> 

这个例子将服务于当地的index.html并将所有其他员工重定向到新域名。

2

如果你想重定向完成新的不同的站点(域)不带任何参数或网页,使用此:

RewriteEngine On 
RewriteRule/http://new-domain.com/$1? [R=301] 
+0

如果在'.htaccess'中使用它,它将无法正常工作,因为它不会匹配文档根目录中的任何URL。它可以在服务器配置或VirtualHost上下文中工作。 – MrWhite 2017-01-07 14:15:13

9

有多种方法可以做到这一点,不同的重定向,我在下面列出它们:

301(永久)重定向:将整个网站永久指向不同的URL。这是最常见的重定向类型,在大多数情况下很有用。在这个例子中,我们将重定向到“example.com”域:

# This allows you to redirect your entire website to any other domain 
Redirect 301/http://example.com/ 

302(临时)重定向:指整个网站到一个不同的临时网址。

# This allows you to redirect your entire website to any other domain 
Redirect 302/http://example.com/ 

重定向的index.html到一个特定的子文件夹:

# This allows you to redirect index.html to a specific subfolder 
Redirect /index.html http://example.com/newdirectory/ 
当你有一个临时的着陆页,并计划在以后的日子切换回主着陆页这是搜索引擎优化的目的是有用的

重定向旧文件到一个新的文件路径:

# Redirect old file path to new file path 
Redirect /olddirectory/oldfile.html http://example.com/newdirectory/newfile.html 

重定向到一个特定的索引页:

# Provide Specific Index Page (Set the default handler) 
DirectoryIndex index.html 
+0

你是男人!它像一个魅力:) – Radek 2015-08-02 17:41:58

+0

如果您添加$ 1到第一个例子,像这个“重定向301/http:// example.com/$ 1' 那么原始网站的所有网页将被重定向到新的网站根目录 – YassinMK 2016-05-23 14:17:09

+0

@YassinMK这里不需要'$ 1',你正在考虑'RedirectMatch'指令(但是你仍然需要为'$ 1'定义一个捕获组来引用)。 – MrWhite 2017-01-07 14:22:36

2

我尝试了user968421的回答和OP的解决方案,但浏览器弹出了一个结帐页面的安全错误。我无法告诉你为什么。

我们的主人(Site Ground)也找不出来。

最终的解决方案很接近,但对user968421的回答略有调整(旁注:与OP不同,我试图重定向到相应的页面,而不仅仅是到主页,因此我保留了后面的参考[$1从user968421的回答域]):

RewriteEngine on 
RewriteRule (.*) https://newdomain.com/$1 [R=301,L] 

得到了这个htaccess redirect generatorHost Gator article(危急时刻,孤注一掷的措施,amiright推荐的好办法?)。

6

如果要重定向您的旧网站到新的领域是不同势主机上,你可以简单地用一个Redirect

Redirect 301/http://newdomain.com 

这将所有请求重定向从olddomainnewdomain

Redirect指令将无法正常工作,或者可能导致Redirect loop如果您NEWDOMAIN和OLDDOMAIN都是同一台主机上,在这种情况下,你需要使用mod-rewrite根据请求的主机头重定向。

RewriteEngine on 


RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.com$ 
RewriteRule^http://newdomain.com%{REQUEST_URI} [NE,L,R] 
8
<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{HTTP_HOST} ^olddomain.com$ [OR] 
    RewriteCond %{HTTP_HOST} ^www.olddomain.com$ 
    RewriteRule (.*)$ http://www.newdomain.com/$1 [R=301,L] 
</IfModule> 

这为我工作

0

我的声誉将不会允许我一个答案发表评论,但我只是想指出的是,这里的收视率最高的答案有一个错误:

RewriteEngine on 
RewriteRule ^(.*)$ http://www.newdomain.com$1 [R=301,L] 

应该有前$ 1斜线,所以

RewriteEngine on 
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L] 
相关问题