通过JS或者NGINX的rewrite命令实现域名跳转且URL路径不变

  • 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会被改写为replaceflag可选。

将旧域名跳转到新域名

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后面可以加flagflag标记有:
* last相当于Apache里的[L]标记,表示完成rewrite
* break终止匹配, 不再匹配后面的规则
* redirect返回302临时重定向 地址栏会显示跳转后的地址
* permanent返回301永久重定向 地址栏会显示跳转后的地址

weinxin
独角兽驿站
公众号

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: