萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 網路程式設計 >> PHP 程式設計

PHPCMS 手機站偽靜態完整設定教學:URL 規則、Rewrite 規則、Nginx/Apache 配置

前言

PHPCMS 手機站(WAP 模組)預設使用動態 URL(?m=wap&a=lists&typeid=1),不利 SEO 且不美觀。本文詳細說明如何修改核心函式、URL 規則常數、配置 Web 伺服器 Rewrite 規則,實現手機站完整偽靜態(/list-1.html、/show-1-1-1.html)。

一、修改核心函式產生靜態化 URL

檔案: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";
}

二、修改 URL 規則常數

檔案: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} 為模板變數,執行時自動替換。

三、Web 伺服器 Rewrite 規則

Apache (.htaccess)

放置於網站根目錄(與 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]

Nginx (nginx.conf / site conf)

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;
}

四、驗證與測試

  1. 清除 PHPCMS 快取:後台「擴展」→「快取管理」→「更新全部快取」
  2. 瀏覽手機站列表頁,檢查連結是否為 /list-1.html 格式
  3. 點擊分頁、內容頁,確認 URL 正確且頁面正常顯示
  4. 使用瀏覽器開發者工具 Network 面板,確認無 301/302 重導向、狀態碼 200

五、常見問題排查

現象原因解決
點擊連結 404 Not FoundRewrite 規則未生效、路徑錯誤確認 .htaccess 允許 Override、Nginx reload、規則順序正確
URL 仍為動態參數快取未清除、修改檔案錯誤重新整理快取、檢查 global.func.php 是否生效
分頁連結錯誤(缺少 page 參數)URLRULE 格式錯誤、模板變數未替換檢查 URLRULE 定義、模板中 {PAGES} 標籤輸出
內容頁 typeid 為空getcache('wap_type') 取不到資料後台「手機門戶」→「類型管理」確認資料、更新快取
Nginx rewrite 導致無限循環last vs break 使用錯誤內部重寫用 last,外部導向用 redirect/permanent

六、進階:自訂 URL 結構(如 /category/phone/page-2.html)

  1. 修改 global.func.php 回傳自訂格式
  2. 修改 URLRULE 對應模板
  3. 調整 Rewrite 規則捕獲群組對應參數
  4. 更新模板中 {PAGES} 分頁標籤輸出邏輯(phpcms/modules/wap/templates/default/list.html)

結語

PHPCMS 手機站偽靜態核心三步驟:1. 修改 global.func.php 產生靜態 URL → 2. 修改 index.php URLRULE 定義規則 → 3. 配置 Web 伺服器 Rewrite。完成後記得清除快取並全流程測試。若專案長期維護,建議將 Rewrite 規則納入版本控制,並撰寫自動化測試驗證關鍵 URL 可達性。

copyright © 萬盛學電腦網 all rights reserved