| 指令 | 說明 |
|---|---|
RewriteEngine On|Off | 啟用/關閉重寫引擎 |
RewriteBase /path/ | 指定重寫基準路徑(相對 DocumentRoot) |
RewriteCond TestString CondPattern [flags] | 定義重寫條件(可多條,AND 關係) |
RewriteRule Pattern Substitution [flags] | 定義重寫規則(核心) |
%{HTTP_HOST}:訪問域名(不含協議/路徑)%{REQUEST_URI}:請求路徑(含 /,不含查詢字符串)%{REQUEST_FILENAME}:映射到文件系統的完整路徑%{QUERY_STRING}:查詢字符串%{HTTP_REFERER}:來源頁面 URL%{HTTPS}:是否 HTTPS (on/off)RewriteEngine On
RewriteBase /
# 條件:訪問 www.example.com 或 example.com
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
# 條件:請求路徑不以 /blog/ 開頭(避免死循環)
RewriteCond %{REQUEST_URI} !^/blog/
# 條件:請求非實際文件/目錄
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 重寫:將所有請求映射到 /blog/ 子目錄
RewriteRule ^(.*)$ /blog/$1 [L]
# 根路徑訪問默認首頁
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteRule ^/?$ /blog/index.php [L]
關鍵點:
RewriteBase / 確保 ^(.*)$ 匹配的是相對路徑(不含域名)[NC] 忽略大小寫[L] 最後一條規則,停止後續匹配RewriteEngine On
RewriteBase /
# 允許空 Referer(直接輸入圖片 URL)
RewriteCond %{HTTP_REFERER} !^$ [NC]
# 允許本域名及子域名
RewriteCond %{HTTP_REFERER} !example\.com [NC]
# 匹配圖片後綴,重寫到防盜鏈圖片
RewriteRule \.(jpg|jpeg|png|gif|bmp|webp)$ /static/images/hotlink.png [R,NC,L]
[R] 觸發 302 重定向,瀏覽器地址欄會變。若想返回 403 直接用 [F]。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# 強制 www
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
# 或強制非 www
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
| Flag | 全稱 | 作用 |
|---|---|---|
L | Last | 停止重寫,不再處理後續規則 |
R[=code] | Redirect | 外部重定向(默認 302),可指定 301/302 |
NC | NoCase | 忽略大小寫匹配 |
QSA | QueryStringAppend | 保留並追加原查詢字符串 |
PT | PassThrough | 傳遞給後續處理器(如 Alias、ScriptAlias) |
F | Forbidden | 返回 403 |
G | Gone | 返回 410 |
E=VAR:VAL | Env | 設置環境變量 |
S=N | Skip | 跳過後續 N 條規則 |
LogLevel alert rewrite:trace3(僅調試環境,生產極其耗性能)RewriteLog (Apache 2.2) 或 RewriteLogLevelRewriteCond %{REQUEST_URI} !^/target/ 排除目標目錄[OR] flag. 需寫 \.,% 在 TestString 中需雙寫 %%