.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.com
redirect。
我如何保留最后一部分?
可能是这样的:
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=foo
redirect到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-rewrite
redirect根据请求的主机头。
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到新的域。