.htaccess重定向所有页面到新域

我将使用哪个重定向规则来重定向olddomain.example下的所有页面,将其重定向到newdomain.example?

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

我认为这将(在旧域。例如基本目录):

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

但是如果我导航到olddomain.example/somepage,我会被重定向到newdomain.example/somepage。我希望重定向到newdomain.example,没有页面后缀。

我怎么才能不提最后一部分?

636842 次浏览

可能是这样的:

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

只是为了澄清,在删除托管重定向这是在路上,我原来的解决方案也起作用:

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

这是apache旧版本中的一个错误(因此mod_rewrite),如果路径被更改,路径前缀会附加到重写的路径上。在这里看到的

我认为它在apache2 V2.2.12中被修复了,有一个你需要使用的特殊标志,当我找到它时,我会在这里添加它,(我认为它是NP for No Path)

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

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

你搜索了“/products”。

不幸的是,这一页已经消失了。您是否愿意访问“/new_products”?

(更好的是,自动地做这件事。)

对于一个更大的网站来说,这显然是大量的编码和启发式,但在我看来,这在用户满意度方面是值得的(当你精心保存的梦想产品书签只是把你引向newdomain.com的首页时,这是令人沮丧的)。

下面的答案可能会导致无限重定向循环…

这里,这个重定向URL中域名之后的所有内容到新域名URL中完全相同的副本:

RewriteEngine on
RewriteRule ^(.*)$ http://www.newdomain.com/ [R=301,L]
www.example.net/somepage.html?var=foo

重定向:

www.newdomain.com

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

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

我作为SymLinks的解决方案在我的服务器上不起作用,所以我在我的PHP中使用了一个If。

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();
}

我在我的Wordpress博客中用的是。htaccess。它将http://www.blah.example/asadhttp://blah.example/asadhttp://www.blah.example2/asad等转换为

如果需要提供一些本地文件,则使用条件重定向,Options -FollowSymLinksAllowOverride -Options被主机禁用:

示例. htaccess

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

这个例子将提供本地index.html并将所有其他人员重定向到新域。

有各种各样的方法来做到这一点和各种重定向,我将它们列在下面:

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

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

302(临时)重定向:将整个网站指向不同的临时URL。这对于搜索引擎优化很有用,当你有一个临时的登录页面,并计划在稍后的日期切换回你的主登录页面:

# 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

我尝试了user968421的答案和OP的解决方案,但浏览器弹出了结帐页面的安全错误。我不能告诉你确切的原因。

我们的主机(Site Ground)也搞不清楚。

最终的解决方案很接近,但对user968421的答案进行了轻微的调整(注:与OP不同,我试图重定向到相应的页面,而不仅仅是到主页,所以我从user968421的答案中维护了反向引用[域后的$1]):

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

宿主鳄鱼文章推荐的Htaccess重定向生成器(绝望的时刻,绝望的措施,amiright?)

如果你要将旧站点重定向到的新域在不同的主机上,你可以简单地使用Redirect

Redirect 301 / http://newdomain.com

这将把所有来自olddomain的请求重定向到newdomain

如果你的newdomain和olddomain都在同一个主机上,Redirect指令将不起作用或可能导致Redirect loop,在这种情况下,你需要使用mod-rewrite根据请求的主机标头重定向。

RewriteEngine on




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

这对我很有效

我的名声不允许我评论一个答案,但我只是想指出,这里评分最高的答案有一个错误:

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

1美元前面应该有斜杠,是吗

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

前面的答案对我没用。

我使用了这个代码。如果您正在使用OSX,请确保使用正确的格式。

Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?OLDDOMAIN\.com$ [NC]
RewriteRule (.*) http://www.NEWDOMAIN.com/ [R=301,L]

就像这样简单,这将不会携带从URL到新域的尾随查询。

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule .* https://www.newdomain.com/? [R=301,L]

尝试这种方法重定向到主页新域,它为我工作:

RewriteCond %{HTTP_HOST} ^olddomain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.olddomain\.com$
RewriteRule ^(.*)$ "https\:\/\/newdomain\.com\/" [R=301,L]

最简单的方法就是:

Redirect 301 / http://www.newsite.com/

来源:https://github.com/phanan/htaccess#redirect-an-entire-site

这可能是正确的工作

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
</IfModule>

只需换出域并保留请求URI:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]
</IfModule>

%{REQUEST_URI}是请求路径的别名。

R=301是一个HTTP 301永久移动

L表示最后一条规则,不再考虑任何条件。

调整请求URI,然后这样做:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ https://example.com/subfolder/$1 [R=301,QSA,L]
</IfModule>

^(.*)$捕获请求路径中从头到尾的所有内容。

$1输出第一个捕获组

QSA表示添加的查询字符串(例如?foo=bar)