- A+
有时处于业务需要或者网站搬家等原因需要切换网站域名,需要对之前的链接地址重定向。比如之前使用www.abc.com主域名,更换为blog.abc.com。由于原来的搜索引擎收录的好多链接都还指向旧域名,影响SEO和访问效果,因此需要对原来的链接做重定向。
可以设置403、404统一跳转到blog.abc.com,但这样仅仅是把原来所有链接访问转向新域名首页。全站页面到页面的重定向有以下两种解决方法。
通过JS实现
一般不推荐使用JS进行重定向,但是JS实用性高不拘泥平台限制而且操作也不难,考虑一些情况比较特殊所以可能比较适用,于是还是在此分享,当然建议最好是使用服务器服务进行301永久重定向,比如使用Apache的用户请参阅Apache .htaccess教程和Apache网址重写指南。
以下JS重定向的代码可以将站点所有旧地址跳转到新域名对应的地址,例如www.abc.com
和他的子目录www.abc.com/about.html
及其他所有页面指向到blog.abc.com
对应页面,跳转后www.abc.com
指向到blog.abc.com
,而www.abc.com/about.html
将指向到blog.abc.com/about.html
页面。完全无缝隙跳转需要在需跳转的域名放置代码和配置好域名即可,推荐把重定向JS放在页面头部,如果放在页面底部,在页面加载的差不多的时候执行跳转会有些不友好。
跳转指定域名
<script language="javascript">
if (document.domain =="www.abc.com")
this.location = "https://blog.abc.com" + this.location.pathname + this.location.search;
</script>
多个域名跳转到指定域名
<script>
if (document.domain =="www.abc.com" || document.domain =="www.def.com" )
this.location = "https://blog.abc.com" + this.location.pathname + this.location.search;
</script>
优化版
<script>
if (document.domain !="blog.abc.com")
this.location = "https://blog.abc.com" + this.location.pathname + this.location.search;
</script>
PHP跳转
PHP判断路径输出:header函数跳转
header("refresh:3;url=https://blog.abc.com");//限时跳转
header('location:https://blog.abc.com');//立即跳转
//head跳转前不要有任何输出,不然可能不能跳转
//
PHP判断路径输出:HTML meta refresh函数跳转
//
//
nginx rewrite 实现URL跳转
这里说的URL跳转就是用户在访问一个URL时将其跳转到另一个URL上。常见的应用场景是让多个域名跳转到同一个URL上,(例如让旧域名跳转到新域名上)将静态文件请求跳转到cdn上,根据用户设备跳转到不同站点等。URL跳转可以通过js在页面上设置的window.location
实现,也可以通过php设置header来实现,当然也可以用nginx的rewrite
功能实现。
rewrite
是nginx的静态重写模块,基本用法是rewrite patten replace flag
,其中patten
是正则表达式,与patten
匹配的URL会被改写为replace
,flag
可选。
将旧域名跳转到新域名
server
{
listen 80;
server_name www.abc.com;
rewrite ".*" http://blog.abc.com;
}
跳转到新域名上时保留路径
server
{
listen 80;
server_name www.abc.com;
rewrite "^/(.*)$" http://blog.abc.com/$1;
}
rewrite与location配合实现图片文件跳转到cdn
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 30d;
rewrite "^/uploadfile\/(.*)$" http://cdn.abc.com/uploadfile/$1;
}
rewrite
后面可以加flag
,flag
标记有:
* last
相当于Apache里的[L]标记,表示完成rewrite
* break
终止匹配, 不再匹配后面的规则
* redirect
返回302临时重定向 地址栏会显示跳转后的地址
* permanent
返回301永久重定向 地址栏会显示跳转后的地址
