.htaccess将所有页面redirect到新的域

我将使用哪个redirect规则将olddomain.com下的所有页面redirect到newdomain.com

该网站有一个完全不同的结构,所以我希望旧网域下的每一个页面被redirect到新的域索引页面

我以为这会做(在olddomain.com基本目录下):

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

但是,如果我导航到olddomain.com/somepage我会redirect到newdomain.com/somepage 。 我期待只有没有页面后缀newdomain.comredirect。

我如何保留最后一部分?

可能是这样的:

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

在这里,这个将url上的域名之后的所有内容redirect到新的域url上的完全相同的副本:

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

www.example.net/somepage.html?var=fooredirect到www.example.com/somepage.html?var=foo

只是为了澄清,删除主机redirect的方式,我原来的解决scheme也起作用:

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

我用我的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> 

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

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

有不同的方法来做到这一点和各种redirect,我已经列出如下:

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

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

302(临时)redirect:将整个站点指向不同的临时URL。 如果您有一个临时login页面,并计划在以后切换回主login页面,这对search引擎优化很有用:

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

将index.htmlredirect到特定的子文件夹:

 # This allows you to redirect index.html to a specific subfolder Redirect /index.html http://example.com/newdirectory/ 

将旧文件redirect到新的文件path:

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

redirect到特定的索引页面:

 # Provide Specific Index Page (Set the default handler) DirectoryIndex index.html 
 <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> 

这对我有效

如果您将旧网站redirect到的新域名位于不同的主机上,则可以简单地使用Redirect

 Redirect 301 / http://newdomain.com 

这会将所有来自olddomain请求redirect到newdomain

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

 RewriteEngine on RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.com$ RewriteRule ^ http://newdomain.com%{REQUEST_URI} [NE,L,R] 

我的解决scheme作为SymLinks没有在我的服务器上工作,所以我用了一个如果在我的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(); } 

这是一个老版本的apache(也就是mod_rewrite)中的一个错误,如果path前缀被改变,那么path前缀被添加到重写的path中。 看这里

我认为这是固定在apache2 V2.2.12,有一个特殊的标志,你需要使用,我会在这里添加,当我find它,(我认为这是NP无path)

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

从可用性的angular度来看,如果你也发送请求的path(也就是你现在拥有的),并让你的新网站处理它,那将会更好:

您search了“/产品”。

不幸的是,这个页面已经消失 您想要访问“/ new_products”吗?

(更好的是,自动执行此操作。)

这显然是一个较大的网站编码和启发式,但在我看来,它会在用户满意度(当你的梦想产品的小心保存的书签只是引导你到newdomain.com的头版,这令人沮丧。)

如果你想要redirect来完成不带参数或页面的新的不同网站(域),使用这个:

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

我尝试了user968421的答案和OP的解决scheme,但浏览器popup一个结帐页面的安全错误。 我不能告诉你为什么。

我们的主人(Site Ground)也弄不清楚。

最终的解决scheme是接近,但对user968421的答案做了一些调整(注意:与OP不同的是,我试图redirect到相应的页面,而不仅仅是主页,所以我保留了后面的引用(域后的$1 ) user968421的回答)

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

从这个主机鳄鱼文章推荐的htaccessredirect生成器 (绝望的时间,绝望的措施,amiright?)得到调整。

如果还应该提供几个本地文件,则使用Hoster禁用的Options -FollowSymLinksAllowOverride -Options Options -FollowSymLinks条件redirect:

示例.htaccess

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

这个例子将服务本地index.html,并将所有其他员工redirect到新的域。