apache配置mod_rewrite url重寫相關

NO IMAGE

Apache模組 mod_rewrite

說明 一個基於一定規則的實時重寫URL請求的引擎
狀態 擴充套件(E)
模組名 rewrite_module
原始檔 mod_rewrite.c
相容性 僅在 Apache 1.3 及以後的版本中可用

概述

此模組提供了一個基於正規表示式分析器的重寫引擎來實時重寫URL請求。它支援每個完整規則可以擁有不限數量的子規則以及附加條件規則的靈活而且強大的URL操作機制。此URL操作可以依賴於各種測試,比如伺服器變數、環境變數、HTTP頭、時間標記,甚至各種格式的用於匹配URL組成部分的查詢資料庫。

此模組可以操作URL的所有部分(包括路徑資訊部分),在伺服器級的(httpd.conf)和目錄級的(.htaccess)配置都有效,還可以生成最終請求字串。此重寫操作的結果可以是內部子處理,也可以是外部請求的轉向,甚至還可以是內部代理處理。

但是,所有這些功能和靈活性帶來一個問題,那就是複雜性,因此,不要指望一天之內就能看懂整個模組

ReWriteBase

說明 設定目錄級重寫的基準URL
語法 RewriteBase URL-path
預設值 參見使用方法
作用域 directory, .htaccess
覆蓋項 FileInfo
狀態 擴充套件(E)
模組 mod_rewrite

# /abc/def/.htaccess -- /abc/def 目錄的配置檔案
# 注意:/abc/def 是 /xyz 的物理路徑(例如存在一條'Alias /xyz /abc/def'指令)。
RewriteEngine On
# 讓伺服器知道我們使用的是 /xyz 而不是物理路徑 /abc/def
RewriteBase   /xyz
# 重寫規則
RewriteRule   ^oldstuff\.html$  newstuff.html

上述例子中,對/xyz/oldstuff.html的請求被正確地重寫為對物理檔案/abc/def/newstuff.html的請求。

僅供Apache Hacker們參考

以下列出了內部處理的詳細步驟:

請求:
/xyz/oldstuff.html
內部處理過程:
/xyz/oldstuff.html     -> /abc/def/oldstuff.html  (per-server Alias)
/abc/def/oldstuff.html -> /abc/def/newstuff.html  (per-dir    RewriteRule)
/abc/def/newstuff.html -> /xyz/newstuff.html      (per-dir    RewriteBase)
/xyz/newstuff.html     -> /abc/def/newstuff.html  (per-server Alias)
結果:
/abc/def/newstuff.html

雖然這個過程看來很繁複,但是由於目錄級重寫的到來時機已經太晚了,它不得不把這個(重寫)請求重新注入到Apache核心中,所以Apache內部確實是這樣處理的。但是:它的開銷並不象看起來的那樣大,因為重新注入完全在Apache伺服器內部進行,而且這樣的過程在Apache內部也為其他許多操作所使用。所以,你可以充分信任其設計和實現是正確的