.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 -FollowSymLinks和AllowOverride -Options Options -FollowSymLinks条件redirect: 
示例.htaccess
 # Redirect everything except index.html to http://foo <FilesMatch "(?<!index\.html)$"> Redirect 301 / http://foo/ </FilesMatch> 
这个例子将服务本地index.html,并将所有其他员工redirect到新的域。