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

Apache Rewrite 伪静态配置完全指南:httpd.conf 與 .htaccess 雙模式詳解

     編輯:PHP 綜合知識

Apache mod_rewrite 是實現 URL 靜態化、路由分發、訪問控制的核心模塊。本文涵蓋模塊啟用、兩種配置載體、核心指令、標誌位、實戰示例。

一、啟用 Rewrite 模塊

# httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so

二、兩種配置載體

方式適用場景生效範圍性能
httpd.conf (或 vhost.conf)擁有服務器配置權限、生產環境全局/虛擬主機✅ 讀取一次,性能最優
.htaccess虛擬主機/共享主機、無 httpd.conf 權限目錄及子目錄⚠️ 每請求遍歷讀取,有性能損耗

啟用 .htaccess 支持:

# httpd.conf 對應目錄配置
AllowOverride All  # 默認 None,必須改為 All

三、核心指令速查

RewriteEngine on          # 啟用引擎
RewriteRule Pattern Substitution [Flags]  # 核心重寫規則
RewriteCond TestString CondPattern [Flags] # 條件判斷(配合 Rule 使用)

四、RewriteRule 正則與捕獲

# 示例:/test123.html → /test.php?id=123
RewriteRule ^/test([0-9]*)\.html$ /test.php?id=$1
# ^           開頭
# test        字面匹配
# ([0-9]*)    捕獲組 $1:純數字
# \.html$     結尾
# $1          反向引用第一個捕獲組

五、常用標誌位 Flags 速查表

Flag全稱作用
RRedirect強制外部重定向(瀏覽器地址欄變化),默認 302,可 R=301
FForbidden返回 403 Forbidden
GGone返回 410 Gone
PProxy代理轉發(需 mod_proxy)
LLast當前規則為最後一條,停止後續匹配
NNext重新從第一條規則開始匹配(慎用,易死循環)
CChain與下一條規則鏈接,當前匹配失敗則跳過下一條
NCNoCase不區分大小寫匹配
QSAQueryStringAppend追加原查詢字符串(如 ?a=1 保留)
NENoEscape輸出不轉義特殊字符(如 %3D 保持 =)

六、實戰示例

# 1. 強制外部重定向並保留查詢參數
RewriteRule ^/new([0-9]*)/$ /new.php?id=$1 [R=301,QSA]

# 2. 簡單靜態化:/in-abc.html → /index.php
RewriteEngine on
RewriteRule ^/in(.*)\.html$ /index.php

# 3. 典型 MVC 入口路由(.htaccess)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

七、調試技巧

  • 開啟 Rewrite 日誌(Apache 2.4+):LogLevel alert rewrite:trace3(僅調試環境,極其耗性能)。
  • 使用 RewriteLog (Apache 2.2) 記錄匹配過程。
  • 線上排查:curl -v 觀察重定向鏈、Response Header 中的 Location。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved