当前位置: 首页 > 知识库问答 >
问题:

vue.js - 前端页面跳转时发生无限循环是为什么?

魏朗
2024-04-07

前端页面渲染前向其他页面跳转,发生无限循环的问题。

import Vue from 'vue'import App from './App.vue'//引入VueRouterimport VueRouter from 'vue-router'import router from './router/index.js'import './assets/style/index.css'import './assets/style/public.css'import './assets/font/font_svcu02nytc/iconfont.css'import './assets/script/js.js'import './assets/script/jquery-3.4.1.min.js'import ElementUI from 'element-ui';import 'element-ui/lib/theme-chalk/index.css';import $ from 'jquery'import store from "./store"import Antd from 'ant-design-vue'import 'ant-design-vue/dist/antd.css'Vue.config.productionTip = false//应用插件Vue.use(VueRouter)Vue.use(ElementUI);Vue.use(Antd)// 获取当前页面的协议const currentProtocol = window.location.protocol;// 如果是 HTTPS 协议,则执行跳转逻辑if (currentProtocol === 'https:') {  const temp_url = window.location.href.replace("https","http")  alert("由于服务器暂未配置域名,点击确定后跳转到http协议网址下")  window.location.href = temp_url} else{  // console.log('当前页面使用 HTTPS 协议');  const vm =new Vue({    render: h => h(App),    router,    store  }).$mount('#app')}// const vm =new Vue({//   render: h => h(App),//   router,//   store// }).$mount('#app')

代码如上:
问题背景是这样:我自己的一个云服务器网站还没有域名,只实现了前端的ssl认证,但是没有实现后端的ssl认证,导致前端无法向后端发送https请求。于是我目前打算,当用户通过https协议登录前端网站的时候,自动跳转到http协议下的该网站,具体实现的代码如上面所写,但是部署到云服务器并测试的时候发现网页不断弹出alert框,且一直在当前页面循环。

经过几次尝试,还发现我即使将这段判断的代码放到单独的component下面的mounted方法里,也会出现无限循环,我在本地测试的时候好像没有问题,但是部署到服务器上就有问题了。可能的情况是什么?

nginx的配置如下:

user root;#user  nobody;worker_processes  1;#error_log  logs/error.log;#error_log  logs/error.log  notice;#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {    worker_connections  1024;}http {    include       mime.types;    default_type  application/octet-stream;    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '    #                  '$status $body_bytes_sent "$http_referer" '    #                  '"$http_user_agent" "$http_x_forwarded_for"';    #access_log  logs/access.log  main;    sendfile        on;    #tcp_nopush     on;    #keepalive_timeout  0;    keepalive_timeout  65;    #gzip  on;    server {        listen       80;        server_name  xxx.xxx.xxx.xx;        #charset koi8-r;        #access_log  logs/host.access.log  main;        root /www/dist;        index index.html;        #location / {        #    root   /home/www/dist;        #    index  index.html index.htm;        #}        #location / {        #    try_files $uri $uri/ /index.html; #新的        #}        #error_page  404              /404.html;        # redirect server error pages to the static page /50x.html        #        error_page   500 502 503 504  /50x.html;        location = /50x.html {            root   html;        }        location / {            try_files $uri $uri/ @router;#需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404            index  index.html index.htm;        }        location @router {            rewrite ^.*$ /index.html last;        }        # proxy the PHP scripts to Apache listening on 127.0.0.1:80        #        #location ~ \.php$ {        #    proxy_pass   http://127.0.0.1;        #}        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000        #        #location ~ \.php$ {        #    root           html;        #    fastcgi_pass   127.0.0.1:9000;        #    fastcgi_index  index.php;        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;        #    include        fastcgi_params;        #}        # deny access to .htaccess files, if Apache's document root        # concurs with nginx's one        #        #location ~ /\.ht {        #    deny  all;        #}    }    # another virtual host using mix of IP-, name-, and port-based configuration    #    #server {    #    listen       8000;    #    listen       somename:8080;    #    server_name  somename  alias  another.alias;    #    location / {    #        root   html;    #        index  index.html index.htm;    #    }    #}    # HTTPS server    #    server {        listen       443 ssl;        server_name  xxx.xxx.xxx.xx;        ssl_certificate /usr/local/nginx/conf/ssl/ipssl/zenon.crt;        ssl_certificate_key /usr/local/nginx/conf/ssl/ipssl/zenon.key;       # ssl_certificate      cert.pem;       # ssl_certificate_key  cert.key;        root /www/dist;        index index.html;        ssl_session_cache    shared:SSL:1m;        ssl_session_timeout  5m;        ssl_ciphers  HIGH:!aNULL:!MD5;        ssl_prefer_server_ciphers  on;                location / {            try_files $uri $uri/ @router;#需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404            index  index.html index.htm;        }        location @router {            rewrite ^.*$ /index.html last;        }    }}

共有2个答案

太叔马鲁
2024-04-07

按照你的描述:
本地测试的时候好像没有问题,但是部署到服务器上就有问题了
那我觉得很有可能是服务器做了什么配置,在重定向到http的时候,服务器端可能又将其重定向回 https了。你题目的这个需求我觉得完全可以用nginx来做呀,一个例子:

server {        listen       443 ssl;        # 域名,实际情况下时,将这个改成域名 https://xx.cn,因为你还没有域名,用ip地址即可        server_name  xx.cn;        ssl on;        ssl_session_timeout 5m;                ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置                ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置         # 证书位置        ssl_certificate  ssl/server.crt;        ssl_certificate_key ssl/server.key;        location / {            proxy_pass http://xx.cn;#这里的xx.cn 是我们需要转发的 ,配合修改hosts文件 : 127.0.0.1  xx.cn,也可以直接http://ip地址:端口        }}

ssl证书你可以先自己生成一个自签名的就完事了,等有真正的证书了再替换即可

司寇祺
2024-04-07

语法
object.replace(url);
参数
url
DOMString 类型,指定所导航到的页面的 URL 地址。

从MDN文档里面看到只能传一个参数,你为什么传了两个

 类似资料:
  • 我在尝试一个测试,我写了这个程序。。。 六羟甲基三聚氰胺六甲醚。。。在下面的代码中,我知道我用了“I”而不是“j”,所以为了解决这个问题,我用了这个 我在节目中遇到的问题是- 在上面的代码中,当我删除这个if块时- 这个节目无限期地进行。。。。。。。。。但当我再次放置这个if块时,程序在执行一段时间后自动终止。我也在这个链接上读到了这一点,但它展示了java的例子 它们显示了负值的原因,但在我的程

  • 如题,用postman测试后端响应数据时没有问题,但是在前端页面渲染出现了问题。负责的内容是操作日志,然而另一个操作日志不会报错,但是这个操作日志会报错卡死。而且是部署在服务器上才出现的问题。 两个不同类型的操作日志的代码基本一样。 有哪些可能导致出现这个问题?如果想要排查前端页面直接卡死的问题该怎么办? 并且比较奇怪的是,用apifox能够获取到后端发送的数据,但是f12中控制台里查看响应却没有

  • 问题描述 点击三级分类时会重定向到 home,这里不是重定向的问题(而是参数丢失的问题),因为我试过了,在 route.js 里把重定向的代码去掉后,页面会出现空白,路径变为 http://localhost:8080/#/ 问题出现的环境背景及自己尝试过哪些方法 跳转的路径没问题,如图,手动添加参数是能正常跳转的 使用 this.router.push 跳转前打印参数,发现也没问题,如图 相关代

  • pages.json 中 pages配置四个页面,其中有三个配置到了tabBar中 删减代码如下: 我现在需要从客户通讯录中通过点击跳转到没有配置在tabBar中的 客户详情页面中,事件代码如下: 结果控制台报错: 我的文件 '/pages/CustomerInfo/index' 是存在的,路径也没有写错,为什么会找不到页面呢?

  • 尝试编写一个程序,其中用户输入他们一周的费用。麻烦在于我希望程序重新询问用户是否输入了不可接受的输入。我想出了如何检测负值的方法,但是当尝试捕获输入不匹配异常(如果像输入字符或字符串一样)时,循环只是无限运行,要求“星期一费用:”我如何使它,以便用户有另一个回答的机会?我试着Rest一下;但是这也打破了做而循环,我不想要。 这是我目前为止的代码: 谢谢你的帮助

  • 你好,有人能解释一下为什么这会形成一个无限循环吗。谢谢