你尚未登录,仅允许查看本站部分内容。请登录使用邀请码注册
nimo

项目迁移URL解决方案 6个回复 专栏 @ 全端

nimo 发布于 2 年前

此文章是 Rain/doc/前后端开发约定-项目迁移解决方案- 独立通用版本。用于避免和解决项目迁移目录时大量的路径修改工作,并提醒新员工别在项目开始时就踩坑。

考虑如下场景:

<!-- 首页代码 -->
您好,请<a href="/login/">登录</a>

项目是一个博客系统,域名是 http://www.domain.com 登录地址是 http://www.domian.com/login/

上线后需求方要求将博客迁移至 http://www.domain.com/blog/

迁移后访问页面,点击登录(/login/)。打开 /login/ 页面后出现404。因为博客的登录页面变成了 /blog/login/,而页面中的链接没有修改。

此时需要将所有页面中的 URL 都加上 /blog/ 前缀才可以确保所有 URL 正确,/login/ 改为 /blog/login/ 等。


当项目迁移至子目录时,因为 URL 前缀固定导致所有页面需要同时修改。我们通过前缀变量的方式解决这个问题。

PHP代码修改如下

define("APP_PATH","/");
您好,请<a href="<?php echo APP_PATH ?>login/">登录</a>

渲染结果:您好,请<a href="/login/">登录</a>

此处是原生 PHP 渲染页面示例,不同后端框架渲染页面方式不同。大致都是定义一个常量,每个 URL 都加上此常量。

使用此方案后,可通过修改常量完成所有页面 URL 的迁移。

define("APP_PATH","/blog/");
您好,请<a href="<?php echo APP_PATH ?>login/">登录</a>

渲染结果:您好,请<a href="/blog/login/">登录</a>

前端注意 AJAX 路径的配置

AJAX 路径也需要加上项目路径前缀,防止项目迁移 AJAX 路径错误。参考如下示例:

<script>
var APP_PATH = "<?php echo APP_PATH ?>";
// 渲染结果:
var APP_PATH = "/";
</script>
<script>
$.get(APP_PATH + 'url/', function () {
    // ...
})
</script>

若作者显示不是Nimo(被转载了),访问Github原文进行讨论:https://github.com/nimojs/blog/issues/11

  • berg

    改了一下你的原文…
    其实是支持的,只是前后要有一个空行,这个跟github 的格式略有不同,稍后我改改吧。

    #1
  • nimo

    @berg <a title="HTML赋值" name="hash_htmlvalue1"></a> 如果能像github一样被直接解析出来就好了,我现在通过 name 做文章目录。在div.io不能跳转。

    因为 a 被删除了,请看github https://github.com/nimojs/blog/issues/13#hash_htmlvalue1a>

    #2
  • berg

    @nimo a标签的确被我屏蔽了,因为你可以直接写一个连接,语法会自动识别并且显示成一个url啊~当然了,你这种从其他地方copy过来的东西,的确改起来有点麻烦……

    #3
  • berg

    @nimo 已经改好上线了,测试一下:

    123

    456
    
    #4
  • 小天同学

    提供了一个很好的解决思路。

    #5
  • nimo

    测试 markdown pre 语法

    console.log('1');
    
    #6
登录后回复,如无账号,请使用邀请码注册