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

Apache RewriteCond 規則參數詳解與實戰範例

     編輯:PHP 相關知識

RewriteCond 是 Apache mod_rewrite 模組的條件判斷指令,類似程式中的 if,只有滿足條件才會執行緊隨其後的 RewriteRule。本文透過多個實例詳細解析其語法、邏輯組合(AND/OR)與常用變數。

基本語法

RewriteCond TestString CondPattern [flags]
  • TestString:測試字串,可包含伺服器變數(如 %{HTTP_USER_AGENT})、反向引用、對應表查找等。
  • CondPattern:正則表達式或特殊條件(如 -f、-d)。
  • flags:NC(忽略大小寫)、OR(邏輯或)、NV(不變體)等。

範例 1:根據 User-Agent 導向不同頁面

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5\.0.* [NC]
RewriteRule ^index\.php$ index.m.php [L]
RewriteCond %{HTTP_USER_AGENT} ^Lynx.* [NC]
RewriteRule ^index\.php$ index.L.php [L]
RewriteRule ^index\.php$ index.b.php [L]

等同 PHP 邏輯:

if (strpos($_SERVER['HTTP_USER_AGENT'], 'Mozilla/5.0') === 0) { /* 行動版 */ }
elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'Lynx') === 0) { /* 文字版 */ }
else { /* 一般版 */ }

範例 2:防盜鏈——檢查 Referer

RewriteCond %{HTTP_REFERER} www\.test\.cn [NC]
RewriteRule (.*)$ test.php [L]

若上一頁網址包含 www.test.cn,所有請求導向 test.php。

範例 3:多條件 OR 邏輯

RewriteCond %{REMOTE_HOST} ^host1.* [OR]
RewriteCond %{REMOTE_HOST} ^host2.* [OR]
RewriteCond %{REMOTE_HOST} ^host3.*
RewriteRule (.*)$ test.php [L]

預設多行 RewriteCond 為 AND 關係,需顯式加 [OR] 旗標實現 OR。

常用實用規則收藏

  • 檔案/目錄存在則直接訪問:
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
  • 排除靜態資源不重寫:
    RewriteCond %{REQUEST_URI} !\.(css|js|gif|png|jpg|jpeg)$ [NC]
  • 強制 HTTPS:
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
  • 禁止特定 User-Agent(爬蟲):
    RewriteCond %{HTTP_USER_AGENT} (bot|spider|crawler) [NC]
    RewriteRule .* - [F]

常用伺服器變數速查

變數說明
%{HTTP_HOST}請求的主機名
%{HTTP_REFERER}來源頁面網址
%{HTTP_USER_AGENT}客戶端瀏覽器標識
%{REQUEST_URI}請求的 URI 路徑
%{REQUEST_FILENAME}對應的本地檔案系統路徑
%{QUERY_STRING}查詢字串
%{REMOTE_ADDR}客戶端 IP
%{HTTPS}是否為 HTTPS 連線 (on/off)

調試技巧

  • 開啟 RewriteLog 與 RewriteLogLevel(Apache 2.4+ 用 LogLevel alert rewrite:trace3)。
  • 在瀏覽器開發者工具 Network 面板觀察重導向鏈路。
  • 善用 RewriteRule .* - [E=MYVAR:1] 設定環境變數輔助除錯。

熟練掌握 RewriteCond 能讓你靈活控制 URL 重寫、存取控制、SEO 優化等核心需求。

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