專案遷移URL解決方案

NimoChu發表於2015-05-06

此文章是 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>

點此訂閱部落格

訪問Github原文進行討論:https://github.com/nimojs/blog/issues/11

相關文章