我将使用哪个重定向规则来重定向olddomain下的所有页面。示例被重定向到newdomain.example?
该网站有一个完全不同的结构,所以我想在旧域下的每个页面都被重定向到新的域索引页。
我认为这将(在旧域。例如基本目录):
RewriteEngine On
RewriteRule ^(.*)$ http://newdomain.example/ [R=301]
但如果我导航到olddomain。我被重定向到newdomain.example/somepage。我期待重定向到newdomain。不带页后缀的示例。
我怎么才能不提最后一部分?
我作为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/asad, http://blah.example/asad, http://www.blah.example2/asad等转换为http://blah.example/asad
感谢所有其他的答案,我想出了这个。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^YOURDOMAIN\.example$ [NC]
RewriteRule ^(.*)$ https://YOURDOMAIN.example/$1 [R=301,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
有各种各样的方法来做到这一点和各种重定向,我将它们列在下面:
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]
从Host Gator文章推荐的这个htaccess重定向生成器得到了调整(绝望的时间,绝望的措施,amiright?)
如果您要将旧站点重定向到的新域位于不同的主机上,您可以简单地使用重定向
Redirect 301 / http://newdomain.com
这将把所有来自olddomain的请求重定向到newdomain。
重定向指令将不起作用或可能导致重定向循环,如果你的newdomain和olddomain都在同一个主机上,在这种情况下,你需要使用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
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,QSA,L]
</IfModule>
%{REQUEST_URI}是请求路径的别名。
R=301是一个HTTP 301永久移动
L表示最后一条规则,不再考虑任何条件。
QSA含义查询字符串追加保存任何查询字符串(例如?foo=bar)
调整域和请求路径,然后这样做:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ https://example.com/subfolder/$1 [R=301,QSA,L]
</IfModule>
^(.*)$捕获请求路径从头到尾的所有内容。
$1输出第一个捕获的组