如何实现国外域名调转到国内已备案ip

在遇到国外服务器被封锁的情况下,作者探讨了如何将老域名www.guardever.com指向已在国内备案的新域名www.jh.tt。尝试了直接IP跳转、DNS解析跳转、iptables端口跳转和haproxy集群跳转等方法,最终通过haproxy结合iptables将流量从80端口重定向到8081端口,实现了域名跳转并成功访问。

最近19大,我们的九护服务器惨遭禁止访问封锁。把人累惨了,每天封锁我们的ip,开始几天可以通过不断的更换新的ip,这样用户访问中断半小时左右,就恢复。

后来GWF越来越牛了,用户间歇性的无法访问了,我们也彻底的投降了,只好从亚马逊迁回到阿里云,备案吧。

问题来了,老的域名(www.guardever.com)不能动还得提供访问,新的域名(www.jh.tt)备案了,现在怎么让www.guardever.com 跳转到国内的 www.jh.tt 呢?

有几个思路:

1. 直接把 www.guardever.com 指向 国内的ip

        2. 域名跳转域名,用域名的CNAME记录

        3. 用iptables 进行端跳转,从 guardever.com的80端口跳转到 jh.tt的80端口

思路确定了,开始执行:

        1.  直接把 www.guardever.com 指向 国内的ip

访问马上就提示没备案,见下图,看来是没戏

        

    2. 域名跳转域名,用域名的CNAME记录

        在dnspod.cn 设置好解析,跟上面第一种情况一样,马上就提示没备案

   3. 用i

<think>我们正在处理一个关于Vue.js中页面跳转的问题。用户希望实现“先跳转到模块再跳转到页面”的功能。根据之前的引用和用户的问题,我们可以这样理解: 1. 用户可能希望在保持某些公共组件(如Header、Footer)不刷新的情况下,只更新页面中的主要内容区域。 2. 引用[1]中提到,使用路由跳转会刷新整个页面,导致一些不需要刷新的组件也重新加载,用户体验不好。他们建议使用`<component :is="...">`来动态切换组件,从而避免整个页面刷新。 3. 引用[2]是关于使用vue-router实现页面跳转的,但用户提到需要先跳转到模块,再跳转到页面,这可能是嵌套路由的应用场景。 4. 引用[3]展示了通过点击标签跳转到页面内的某个模块(锚点跳转),但这并不是用户想要的。 5. 引用[4]展示了一个点击按钮跳转到新页面的例子,但同样没有涉及模块的概念。 基于以上分析,用户的需求可能是: - 在一个页面中,首先展示某个模块(比如一个列表),然后点击列表中的某一项,跳转到该项目的详情页面(另一个模块或页面)。同时,希望整个过程中公共部分(如Header、Footer)不刷新。 我们可以通过以下两种方式实现: ### 方案一:使用嵌套路由 嵌套路由允许我们在一个页面中嵌套多个子路由,每个子路由对应一个组件(模块)。这样,当我们在父路由下切换子路由时,父路由对应的组件(包括公共部分)不会重新加载。 步骤: 1. 定义路由:在router.js中配置嵌套路由。 2. 在父组件中使用`<router-view>`来显示子路由对应的组件。 示例代码: ```javascript // router.js const routes = [ { path: '/home', component: Home, // 父组件,包含Header、Footer和主要内容区域的<router-view> children: [ { path: 'module', // 子路由路径,实际路径为/home/module name: 'Module', component: Module // 模块组件 }, { path: 'page/:id', // 子路由路径,实际路径为/home/page/123 name: 'Page', component: Page // 页面组件 } ] } ] ``` 在父组件Home.vue中: ```vue <template> <div> <Header /> <router-view></router-view> <!-- 这里将显示Module或Page组件 --> <Footer /> </div> </template> ``` 然后,在Module组件中,我们可以通过编程式导航跳转到Page组件: ```javascript // Module.vue中的方法 goToPage(id) { this.$router.push({ name: 'Page', params: { id } }) } ``` ### 方案二:使用动态组件(如引用[1]中的方法) 如果不想使用嵌套路由,也可以使用动态组件切换。在父组件中,通过一个变量来决定显示哪个组件(模块或页面)。 示例: ```vue <template> <div> <Header /> <component :is="currentComponent" @navigate="handleNavigate"></component> <Footer /> </div> </template> <script> import Module from './Module.vue' import Page from './Page.vue' export default { components: { Module, Page }, data() { return { currentComponent: 'Module', // 初始显示Module组件 pageId: null } }, methods: { handleNavigate(id) { // 从Module组件传递过来的事件,切换到Page组件 this.currentComponent = 'Page' this.pageId = id } } } </script> ``` 在Module组件中,触发事件: ```javascript // Module.vue中的方法 goToPage(id) { this.$emit('navigate', id) } ``` ### 比较两种方案: - 嵌套路由:URL会变化,可以分享链接,且可以利用浏览器的前进后退。推荐使用。 - 动态组件:URL不变,无法直接分享到具体页面,但实现简单。 根据用户需求,我们更推荐使用嵌套路由,因为它更符合常规的页面跳转逻辑,并且可以结合路由参数传递信息。 因此,我们给出以下步骤: 1. 配置嵌套路由(如方案一所示)。 2. 在父组件中使用`<router-view>`作为子组件的出口。 3. 在模块组件(Module)中,使用`$router.push`方法跳转到页面组件(Page),并传递参数(如id)。 4. 在页面组件(Page)中,通过`this.$route.params.id`获取参数。 这样,用户访问`/home/module`时显示模块,然后点击模块中的某项,跳转到`/home/page/123`,此时父组件不会刷新,只有子组件区域更新。 ### 相关问题 §§相关问题§§ 1. Vue中如何配置嵌套路由? 2. 使用嵌套路由时,如何传递参数? 3. Vue中动态组件和路由有什么区别? 4. 如何避免切换路由时公共组件重复渲染? </think>在Vue中实现**先跳转到模块再跳转到页面**的功能,本质是处理组件间的层级跳转关系。以下是两种主流实现方案,结合嵌套路由和动态组件技术: --- ### 方案一:嵌套路由(推荐) 通过Vue Router的嵌套路由实现模块→页面的两级跳转,保持URL同步且组件复用: ```javascript // router.js const routes = [ { path: '/module', component: ModuleLayout, // 模块容器组件 children: [ { path: 'page/:id', // 路径如 /module/page/123 name: 'module-page', component: DetailPage // 目标页面组件 } ] } ] ``` **操作步骤**: 1. 用户在模块组件中触发跳转: ```vue <template> <button @click="goToPage(item.id)">进入详情页</button> </template> <script> export default { methods: { goToPage(id) { this.$router.push({ name: 'module-page', params: { id } // 传递页面ID }) } } } </script> ``` 2. 模块容器组件需包含`<router-view>`占位符: ```vue <!-- ModuleLayout.vue --> <template> <div> <Header/> <!-- 公共模块头部 --> <router-view/> <!-- 此处渲染嵌套页面 --> <Footer/> <!-- 公共模块底部 --> </div> </template> ``` **优势**: - URL路径清晰:`/module/page/123` - 模块布局组件(Header/Footer)仅加载一次[^1] - 支持浏览器历史记录管理 --- ### 方案二:动态组件 + 状态管理 适用于URL无需变化的场景,通过组件动态切换: ```vue <!-- ModuleContainer.vue --> <template> <div> <Header/> <component :is="currentComponent" :pageId="activePageId"/> <Footer/> </div> </template> <script> export default { data() { return { currentComponent: 'ModuleList', // 初始模块组件 activePageId: null } }, methods: { openPage(id) { this.activePageId = id this.currentComponent = 'DetailPage' // 切换到页面组件 }, backToModule() { this.currentComponent = 'ModuleList' // 返回模块 } }, components: { ModuleList, DetailPage } } </script> ``` --- ### 关键差异对比 | **特性** | 嵌套路由方案 | 动态组件方案 | |------------------|----------------------------------|--------------------------| | URL变化 | ✅ 同步更新路径 | ❌ 无变化 | | 组件复用 | ✅ 模块布局不刷新 | ✅ 模块布局不刷新[^1] | | 前进/后退支持 | ✅ 原生支持 | ❌ 需手动实现历史堆栈 | | SEO友好 | ✅ 每个页面独立URL | ❌ 单URL多内容 | | 适用场景 | 标准页面跳转 | 单页应用内的Tab切换 | > ⚠️ 注意事项: > 若使用锚点跳转(如引用[3]),只能实现**页面内模块定位**,无法满足跨组件跳转需求。 --- ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值