PHPCMS 手機站(WAP 模組)預設使用動態 URL(?m=wap&a=lists&typeid=1),不利 SEO 且不美觀。本文詳細說明如何修改核心函式、URL 規則常數、配置 Web 伺服器 Rewrite 規則,實現手機站完整偽靜態(/list-1.html、/show-1-1-1.html)。
phpcms/modules/wap/functions/global.func.php<?php
/**
* 列表頁 URL
* 原:return WAP_SITEURL . "&a=lists&typeid=$typeid";
*/
function list_url($typeid)
{
return "/list-{$typeid}.html";
}
/**
* 內容頁 URL
* 原:return WAP_SITEURL . "&a=show&catid=$catid&typeid=$typeid&id=$id";
*/
function show_url($catid, $id, $typeid = '')
{
global $WAP;
if ($typeid === '') {
$types = getcache('wap_type', 'wap');
foreach ($types as $type) {
if ($type['cat'] == $catid) {
$typeid = $type['typeid'];
break;
}
}
}
return "/show-{$catid}-{$typeid}-{$id}-1.html";
}
phpcms/modules/wap/index.php(約第 59 行)<?php
// 原:define('URLRULE', 'index.php?m=wap&c=index&a=lists&typeid={$typeid}~index.php?m=wap&c=index&a=lists&typeid={$typeid}&page={$page}');
define('URLRULE', 'list-{$typeid}.html~list-{$typeid}-{$page}.html');
說明:~ 分隔「首頁/第一頁」與「分頁」兩種規則。{$typeid}、{$page} 為模板變數,執行時自動替換。
放置於網站根目錄(與 index.php 同層):
RewriteEngine On
# 列表首頁
RewriteRule ^list-([0-9]+)\.html$ index.php?m=wap&a=lists&typeid=$1 [L,QSA]
# 列表分頁
RewriteRule ^list-([0-9]+)-([0-9]+)\.html$ index.php?m=wap&a=lists&typeid=$1&page=$2 [L,QSA]
# 內容頁
RewriteRule ^show-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)\.html$ index.php?m=wap&a=show&catid=$1&typeid=$2&id=$3&page=$4 [L,QSA]
location / {
# 列表首頁
rewrite ^/list-([0-9]+)\.html$ /index.php?m=wap&a=lists&typeid=$1 last;
# 列表分頁
rewrite ^/list-([0-9]+)-([0-9]+)\.html$ /index.php?m=wap&a=lists&typeid=$1&page=$2 last;
# 內容頁
rewrite ^/show-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /index.php?m=wap&a=show&catid=$1&typeid=$2&id=$3&page=$4 last;
}
/list-1.html 格式| 現象 | 原因 | 解決 |
|---|---|---|
| 點擊連結 404 Not Found | Rewrite 規則未生效、路徑錯誤 | 確認 .htaccess 允許 Override、Nginx reload、規則順序正確 |
| URL 仍為動態參數 | 快取未清除、修改檔案錯誤 | 重新整理快取、檢查 global.func.php 是否生效 |
| 分頁連結錯誤(缺少 page 參數) | URLRULE 格式錯誤、模板變數未替換 | 檢查 URLRULE 定義、模板中 {PAGES} 標籤輸出 |
| 內容頁 typeid 為空 | getcache('wap_type') 取不到資料 | 後台「手機門戶」→「類型管理」確認資料、更新快取 |
| Nginx rewrite 導致無限循環 | last vs break 使用錯誤 | 內部重寫用 last,外部導向用 redirect/permanent |
global.func.php 回傳自訂格式URLRULE 對應模板phpcms/modules/wap/templates/default/list.html)PHPCMS 手機站偽靜態核心三步驟:1. 修改 global.func.php 產生靜態 URL → 2. 修改 index.php URLRULE 定義規則 → 3. 配置 Web 伺服器 Rewrite。完成後記得清除快取並全流程測試。若專案長期維護,建議將 Rewrite 規則納入版本控制,並撰寫自動化測試驗證關鍵 URL 可達性。