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

Apache RewriteCond 規則參數詳解與實戰技巧

     編輯:PHP 綜合知識

RewriteCond 基礎

`RewriteCond` 類似編程中的 `if` 語句:當條件滿足時,執行緊隨其後的 `RewriteRule`。多條 `RewriteCond` 默認邏輯與(AND),需顯式加 `[OR]` 標誌實現或(OR)邏輯。

實例演示

例 1:根據 User-Agent 重定向

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5\.0.*
RewriteRule index\.php index.m.php

RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
RewriteRule index\.php index.L.php

RewriteRule index\.php index.b.php

等同於 PHP 邏輯:

if ($_SERVER['HTTP_USER_AGENT'] == 'Mozilla/5.0') {
    // 訪問 index.m.php
} elseif ($_SERVER['HTTP_USER_AGENT'] == 'Lynx') {
    // 訪問 index.L.php
} else {
    // 訪問 index.b.php
}

例 2:根據 Referer 重定向

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

若上一頁主機為 www.test.cn,所有請求跳轉至 test.php。

例 3:多條件 OR 邏輯

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

滿足任一主機條件即跳轉。

常用實戰規則收藏

# 文件存在直接訪問,不重寫
RewriteCond %{REQUEST_FILENAME} !-f

# 目錄存在直接訪問,不重寫
RewriteCond %{REQUEST_FILENAME} !-d

# 靜態資源直接訪問,不重寫
RewriteCond %{REQUEST_URI} !^.*(\.css|\.js|\.gif|\.png|\.jpg|\.jpeg)$

這三條常組合用於前端控制器模式(如框架入口 index.php),確保靜態資源不經框架處理,提升性能。

核心變量速查

變量含義
%{HTTP_USER_AGENT}客戶端瀏覽器標識
%{HTTP_REFERER}來源頁面 URL
%{REMOTE_HOST}客戶端主機名
%{REQUEST_FILENAME}請求映射的本地文件路徑
%{REQUEST_URI}請求的 URI 路徑

總結

掌握 `RewriteCond` 的條件判斷、正則匹配、標誌位(`[OR]`, `[NC]` 等)及常用服務器變量,能靈活實現訪問控制、URL 美化、多站點路由等需求。建議結合 `RewriteLog` 調試複雜規則。

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