此文章是 Rain/doc/先后端开发约定 中 -项目迁移解决方案- 独立通用版本。用于避免和解决项目迁移目录时大量的路径修改工做,并提醒新员工别在项目开始时就踩坑。php
考虑以下场景:html
<!-- 首页代码 --> 您好,请<a href="/login/">登陆</a>
项目是一个博客系统,域名是 http://www.domain.com
登陆地址是 http://www.domian.com/login/
。前端
上线后需求方要求将博客迁移至 http://www.domain.com/blog/
。git
迁移后访问页面,点击登陆(/login/)
。打开 /login/
页面后出现404。由于博客的登陆页面变成了 /blog/login/
,而页面中的连接没有修改。github
此时须要将全部页面中的 URL 都加上 /blog/
前缀才能够确保全部 URL 正确,/login/
改成 /blog/login/
等。ajax
当项目迁移至子目录时,由于 URL 前缀固定致使全部页面须要同时修改。咱们经过前缀变量的方式解决这个问题。后端
PHP代码修改以下框架
define("APP_PATH","/"); 您好,请<a href="<?php echo APP_PATH ?>login/">登陆</a>
渲染结果:您好,请<a href="/login/">登陆</a>
dom
此处是原生 PHP 渲染页面示例,不一样后端框架渲染页面方式不一样。大体都是定义一个常量,每一个 URL 都加上此常量。url
使用此方案后,可经过修改常量完成全部页面 URL 的迁移。
define("APP_PATH","/blog/"); 您好,请<a href="<?php echo APP_PATH ?>login/">登陆</a>
渲染结果:您好,请<a href="/blog/login/">登陆</a>
AJAX 路径也须要加上项目路径前缀,防止项目迁移 AJAX 路径错误。参考以下示例:
<script> var APP_PATH = "<?php echo APP_PATH ?>"; // 渲染结果: var APP_PATH = "/"; </script> <script> $.get(APP_PATH + 'url/', function () { // ... }) </script>
访问Github原文进行讨论:https://github.com/nimojs/blog/issues/11