首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Apache URL Rewrite 完整配置指南:從啟用模組到 RewriteRule 實戰

     編輯:PHP 綜合知識

前置條件

URL Rewrite 需要 Web 伺服器支援。Apache 需載入 mod_rewrite 模組,IIS 則需安裝 URL Rewrite Module。本文以 Apache 為主說明。

Apache 啟用 mod_rewrite

  1. 打開 httpd.conf(或 apache2.conf)。
  2. 找到 #LoadModule rewrite_module modules/mod_rewrite.so,移除前面的 #。
  3. 確保目標目錄的 AllowOverride 設為 All(或至少包含 FileInfo),允許 .htaccess 覆寫規則。
  4. 重啟 Apache:systemctl restart httpd 或 apachectl -k restart。

主配置文件寫法(httpd.conf / VirtualHost)

<IfModule mod_rewrite.c>
    RewriteEngine On

    # 範例:將 index-123.html 重寫為 index.php?__rewrite_arg=123
    RewriteRule ^(.*?(?:index|dispbbs))-([-0-9]+)\.html$ $1.php?__is_apache_rewrite=1&__rewrite_arg=$2 [L]

    # 進階:ASP 舊網址映射到 PHP(保留查詢字串,轉小寫)
    RewriteMap tolowercase int:tolower
    RewriteCond %{QUERY_STRING} (?:boardid|page|id|replyid|star|skin)=\d+ [NC]
    RewriteRule ^(.*(?:index|dispbbs))\.asp$ $1.php?${tolowercase:%{QUERY_STRING}}&__is_apache_rewrite=1 [L]
</IfModule>

.htaccess 寫法(共享主機常用)

將上述 <IfModule> 區塊內容直接放入網站根目錄的 .htaccess,無需重啟 Apache 即時生效。

常用旗標說明

旗標含義
[L]Last:停止後續規則處理
[R=301]永久重導向(瀏覽器網址列會變)
[NC]No Case:大小寫不敏感
[QSA]Query String Append:保留原查詢字串
[PT]Pass Through:交給後續處理器(如 mod_alias)

實戰範例:靜態化偽靜態 URL

# 將 /article/123.html 映射到 /article.php?id=123
RewriteRule ^article/([0-9]+)\.html$ article.php?id=$1 [L,QSA]

# 強制 HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# 防盜鏈
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com [NC]
RewriteRule \.(jpg|png|gif)$ - [F,NC]

除錯技巧

  • 啟用重寫日誌(Apache 2.4+):LogLevel alert rewrite:trace3,查看 error.log 追蹤匹配過程。
  • 使用 RewriteLog 與 RewriteLogLevel(Apache 2.2 舊版)。
  • 線上測試工具:htaccess tester、Regex Tester。

IIS 簡易對應

IIS 使用 web.config 定義規則,語法採 XML 格式:

<rule name="Rewrite to PHP" stopProcessing="true">
    <match url="^article/([0-9]+)\.html$" />
    <action type="Rewrite" url="article.php?id={R:1}" appendQueryString="true" />
</rule>

總結

掌握 RewriteCond、RewriteRule、正則表達式與旗標組合,即可靈活實現 URL 美化、舊網址遷移、安全防護等需求。建議優先在 .htaccess 開發測試,上線後遷移至主配置以提升效能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved