Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

Apache RewriteCond 指令深度解析:條件匹配、變數、標誌與實戰範例

編輯:關於伺服器

RewriteCond 定義 RewriteRule 生效的前置條件,支援多條件 AND/OR 邏輯,是動態重寫的核心控制器。

語法結構

RewriteCond TestString CondPattern [flags]
  • TestString:測試字串,可包含伺服器變數、反向引用、映射查找
  • CondPattern:條件模式(Perl 相容正則 + 特殊前綴)
  • flags:NC(忽略大小寫)、OR(邏輯或)

TestString 可用變數分類

類別代表變數
HTTP 請求頭%{HTTP_HOST}, %{HTTP_USER_AGENT}, %{HTTP_REFERER}, %{HTTP_COOKIE}
連線與請求%{REMOTE_ADDR}, %{REQUEST_METHOD}, %{QUERY_STRING}, %{REQUEST_URI}, %{REQUEST_FILENAME}
伺服器內建%{SERVER_NAME}, %{SERVER_PORT}, %{SERVER_PROTOCOL}, %{DOCUMENT_ROOT}, %{HTTPS}
時間日期%{TIME_YEAR}, %{TIME_MON}, %{TIME_DAY}, %{TIME_HOUR}, %{TIME_MIN}, %{TIME_SEC}, %{TIME_WDAY}, %{TIME}
特殊%{THE_REQUEST}, %{API_VERSION}, %{IS_SUBREQ}

CondPattern 特殊前綴(非正則)

前綴含義範例
!否定匹配!^admin
<字典序小於<test
>字典序大於>test
=字典序等於(可比空串)=""
-d存在且為目錄-d
-f存在且為一般檔案-f
-s存在且大小 > 0-s
-l存在且為符號連結-l
-x存在且可執行-x
-F子請求檢查檔案可訪問(慎用,影響效能)-F
-U子請求檢查 URL 可訪問(慎用)-U

Flags 詳解

  • NC / nocase:測試字串與模式比較時忽略大小寫
  • OR / ornext:將下一條 RewriteCond 以 OR 邏輯連接(預設 AND)

實戰範例

1. 多域名導向同一規則集

RewriteCond %{HTTP_HOST} ^site1\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.site1\.com$ [OR]
RewriteCond %{HTTP_HOST} ^site2\.com$
RewriteRule ^(.*)$ /sites/%{HTTP_HOST}/$1 [L]

2. 防盜鏈:僅允許特定 Referer

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?mysite\.com/.*$ [NC]
RewriteRule \.(jpg|png|gif)$ - [F]

3. 移動端子域名導向

RewriteCond %{HTTP_USER_AGENT} "android|iphone|ipad" [NC]
RewriteCond %{HTTP_HOST} !^m\.
RewriteRule ^(.*)$ https://m.mysite.com/$1 [R=302,L]

4. 靜態檔案存在則直接服務,否則轉發動態處理

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

調試技巧

# 啟用重寫日誌(Apache 2.4+)
LogLevel alert rewrite:trace3
# 錯誤日誌將顯示詳細匹配過程
Copyright © Windows教程網 All Rights Reserved