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

由于之前使用pic.lkx.ink作为博客的主域名,但现在更换为pic.lkx.ink,所以原来的搜索引擎收录的好多链接都还指向旧域名。影响SEO的同时,也很影响访问效果。

下面分享给大家的方法不同于301和302跳转,例如博主最开始设置了403、404统一跳转到pic.lkx.ink,但是这样仅仅是实现了原来所有链接访问转向新域名首页。
进过一番查找和询问,最终找到了两种解决方法。

方法一:通过JS实现

一般不推荐使用JS进行重定向,但是JS实用性高不拘泥平台限制而且操作也不难,考虑一些情况比较特殊所以可能比较适用,于是还是在此分享,当然建议最好是使用服务器服务进行301永久重定向,比如使用Apache的用户请参阅Apache .htaccess教程和Apache网址重写指南。(如果不清楚自己服务器配置可以咨询服务器供应商,当然如果觉得麻烦可以使用这里分享的JS重定向。)

这段JS重定向的代码可以帮你将你站点所有旧地址跳转到新域名对应的地址,例如http://pic.lkx.ink和他的子目录http://pic.lkx.ink/about.html及其他所有页面指向到https://pic.lkx.ink对应页面,跳转后http://pic.lkx.ink指向到https://pic.lkx.ink,而http://pic.lkx.ink/about.html将指向到https://pic.lkx.ink/about.html页面,完全无缝隙跳转只要在需跳转的域名放置代码和配置好域名即可,如果这段重定向JS放在页面头部那么会在加载时就执行跳转,如果放在页面底部那么可能是页面加载的差不多的时候执行跳转(这样会有些不友好,当整个页面都加载好了突然闪一下,虽然页面内容没有变只变了地址栏的地址。)(我这边使用的是404跳转页面,所以加入JS毫无违和感)
JS重定向代码:

<script language="javascript">     
if (document.domain =="pic.lkx.ink")     
        this.location = "https://pic.lkx.ink" + this.location.pathname + this.location.search;     
</script>

多个域名跳转到指定域名:

<script>
    if (document.domain =="pic.lkx.ink" || document.domain =="qjblog.top" )
            this.location = "https://pic.lkx.ink" + this.location.pathname + this.location.search;     
</script>

优化版:多个域名跳转到指定域名:

<script>
    if (document.domain !="pic.lkx.ink")
            this.location = "https://pic.lkx.ink" + this.location.pathname + this.location.search;     
</script>

这两个的区别在于:第一个只能识别所指定的几个域名进行跳转,第二个会判断访问当前页面只要域名不是pic.lkx.ink都会自动跳转到pic.lkx.ink


方法二:nginx rewrite 实现URL跳转

URL跳转
这里说的URL跳转就是用户在访问一个URL时将其跳转到另一个URL上。
常见的应用场景是让多个域名跳转到同一个URL上,(例如让旧域名跳转到新域名上)
将静态文件请求跳转到cdn上等
根据用户设备跳转到不同站点(pc版,wap版)等。
URL跳转可以通过js在页面上设置的window.location实现
也可以通过php设置header来实现
当然也可以用nginx 的 rewrite功能实现

nginx rewrite模块
rewrite 是 nginx的静态重写模块
基本用法是 rewrite patten replace flag
patten是正则表达式,与patten匹配的URL会被改写为replace,flag可选

例如将旧域名跳转到新域名上

server
{
listen 80;
server_name www.old.com;
rewrite ".*" http://www.new.com;
}

跳转到新域名上时保留路径

server
{
listen 80;
server_name www.old.com;
rewrite "^/(.*)$" http://www.new.com/$1;
}

rewrite与location配合实现图片文件跳转到cdn

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 30d;
rewrite "^/uploadfile\/(.*)$" http://static.XXX.com/uploadfile/$1;
}

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


博主使用的是方法一,应为情况比较特殊,第二种方法比较适用于将www.a.com的所有链接都直接跳转至www.b.com,包括首页,所以适合更换新旧域名的小伙伴用,而博主是由一级域名转二级域名,原域名pic.lkx.ink还有用,所以用JS跳转至pic.lkx.ink。所以大家根据自己的情况而定吧!大部分都在用第二种方法。


文(侵删):网络+个人杜撰(清酒)
参考:nginx中location、rewrite用法总结
无标签
评论区
头像
    头像
    repostone
      

    非技术的路过。

    头像
    搬瓦工
      

    学习了

      头像
      清酒
        
      @搬瓦工

      哈哈,都在不断学习中

    头像

    还是用nginx的方法比较好。

      头像
      清酒
        
      @心灵博客

      由于我的情况特殊,所以用了JS的方法