Rewirte主要的功能就是實現URL的跳轉,它的正則表達式是基於Perl語言。可基於服務器級的(httpd.conf)和目錄級的 (.htaccess)兩種方式。若是要想用到rewrite模塊,必須先安裝或加載rewrite模塊。方法有兩種一種是編譯apache的時候就直接 安裝rewrite模塊,別一種是編譯apache時以DSO模式安裝apache,而後再利用源碼和apxs來安裝rewrite模塊。html
基於服務器級的(httpd.conf)有兩種方法,一種是在httpd.conf的全局下 直接利用RewriteEngine on來打開rewrite功能;另外一種是在局部裏利用RewriteEngine on來打開rewrite功能,下面將會舉例說明,須要注意的是,必須在每一個virtualhost裏用RewriteEngine on來打開rewrite功能。不然virtualhost裏沒有RewriteEngine on它裏面的規則也不會生效。正則表達式
基於目錄級的(.htaccess),要注意一點那就是必須打開此目錄的FollowSymLinks屬性且在.htaccess裏要聲明RewriteEngine on。express
RewriteCond重寫規則的條件apache
RewriteCond指令定義一條規則條件。在一條RewriteRule指令前面可能會有一條或多條RewriteCond指令,只有當自身的模板(pattern)匹配成功且這些條件也知足時規則才被應用於當前URL處理。 TestString是一個字符串,除了包含普通的字符外,還能夠包括下列的可擴展結構:瀏覽器
HTTP headers:
|
connection & request:
|
server internals:
|
system stuff:
|
HTTP_USER_AGENT
|
REMOTE_ADDR
|
DOCUMENT_ROOT
|
TIME_YEAR
|
HTTP_REFERER
|
REMOTE_HOST
|
SERVER_ADMIN
|
TIME_MON
|
HTTP_COOKIE
|
REMOTE_USER
|
SERVER_NAME
|
TIME_DAY
|
HTTP_FORWARDED
|
REMOTE_IDENT
|
SERVER_ADDR
|
TIME_HOUR
|
HTTP_HOST
|
REQUEST_METHOD
|
SERVER_PORT
|
TIME_MIN
|
HTTP_PROXY_CONNECTION
|
SCRIPT_FILENAME
|
SERVER_PROTOCOL
|
TIME_SEC
|
HTTP_ACCEPT
|
PATH_INFO
|
SERVER_SOFTWARE
|
TIME_WDAY
|
|
QUERY_STRING
|
|
TIME
|
|
AUTH_TYPE
|
|
|
specials:
|
說明
|
API_VERSION
|
Apache與模塊間的接口的版本號
|
THE_REQUEST
|
客戶端發送到來的HTTP請求行的整行信息,不含其它的頭字段信息,如("GET /index.html HTTP/1.1")
|
REQUEST_URI
|
HTTP請求行中請求的資源
|
REQUEST_FILENAME
|
請求中對應的服務器本地文件系統中全路徑文件名
|
IS_SUBREQ
|
根據是否爲SubRequest,分別值爲」true」或」false」
|
當你在地址欄裏輸入 sina.com.cn google.cn服務器
看看有什麼變化?是否是會自動跳轉到 www.sina.com.cn www.google.cn數據結構
這一技術經過apache的rewrite能夠實現,固然你得把 不帶www的域名指向你服務器的IPdom
要是虛擬主機的話,得在viralhost段加入 ServerAlias xxx.com性能
而後打開重寫引擎功能google
RewriteEngine On
能過rewritecond判斷主機名是否帶www
RewriteCond %{HTTP_HOST} ^xxx/.com$ [NC]
而後來一條
RewriteRule ^/(.*)$ http://www.xxx.com/$1 [R=301,L]
OK,重起apache,如今在瀏覽器中輸入 xxx.com 看看是否是自動變成了www.xxx.com了呢。
從新整理一下就是:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^xxx/.com$ [NC]
RewriteRule ^/(.*)$ http://www.xxx.com/$1 [R=301,L]
用.htaccess文件的話: