Apache Web Server——RewriteRule

Apache Web Server——RewriteRule

作者:張桂權

(摘自《

正則表達式袖珍手冊》一書。譯者,張桂權。可以從http://download.csdn.net/source/346896下載完整的譯稿。如果感覺不錯就去買一本原版的書吧,Regular Expression Pocket Reference,支持原書的作者。看PDF文件也是很累的。看完之後別忘了,給我提寶貴意見哦。謝謝。[email protected]


       重寫引擎強化了基於正則表達式的URLs重寫。這個功能通過RewriteEngine On定向來實現。絕大多數的重寫是單行的RewriteRule或一個RewriteCond緊跟一個RewriteRule的聯合。

 

RewriteRule pattern substitution [[FLAG1, FLAG2, ...]]

       如果URLpattern成功匹配,那麼把URL重寫爲substitutionsubstitution可以包含RewriteRule模式的回引($N),最後匹配的RewriteCond模式的回引(%N),以及規則中條件測試字符串(test-strings)中的一些變量(%{VARNAME}),和映射函數調用(${mapname:key|default})。表53中列出的可選標識,當匹配發生時引發服務器的一系列行爲。

 

ReeorteCond teststring pattern

       爲了應用一個RewriteRule,定義一個測試條件(表54)。RewriteRule前面的多個RewriteCond之間通過隱含的AND來連接,除非被指定爲OR teststring可以包含RewriteRule模式的回引($N),最後匹配的RewriteCond模式的回引(%N),以及規則中條件測試字符串(test-strings)中的一些變量(%{VARNAME}),和映射函數調用(${mapname:key|default})。

 

       55中列出了對重寫有影響的一些變量。

 

Apache RewriteRule標識

模式

模式描述

C

下一個規則的鏈(chain)。如果規則匹配,則實行重寫,以及緊接的被鏈的重寫,否則中止鏈。

CO=NAME:VAL:domain

[:lifetime[:path]]

設置cookie

E=VAR:VAL

設置一個環境變量

F

禁止;發送403代碼

G

已經轉移;發送401代碼

H=Content-handler

發送內容的操作者

L

最後的規則;不使用任何更多的重寫規則。

N

下一個規則;在新的重寫URL中使用這個規則。

 

54  Apache RewriteRule標識


 

 

Apache RewriteRule標識(續)

模式

模式描述

NC

沒有大小寫;使用大小寫不敏感的匹配。

NE

URL轉義規則的應用程序不能對規則的輸出進行轉義

NS

如果請求是內部的子請求,則跳過處理

P

停止重寫處理,轉而處理一個內部代理請求的結果

PT

轉移到下一個操作者,設置請求結構,這樣Alias,ScriptAliasRedirect可可以作用於結果。

QSA

填充查詢字符串

R[=Code]

重定向到一個新的URL可選碼。默認碼爲302

S=num

跳過後續的num個規則。

T=MIME-type

設置MIME類型

 

54  Apache RewriteRule標識(續)

 

Apache RewriteCond標識

模式

模式描述

NC

沒有大小寫;使用大小寫不敏感的匹配。

OR

用一個局部的OR來連接規則條件,而不是隱含的AND

 

55 Apache RewriteCond標識

 

Apache Server 變量

HTTP頭部

連接和請求

HTTP_USER_AGENT

REMOTE_ADDR

HTTP_REFERER

REMOTE_HOST

HTTP_COOKIE

REMOTE_PORT

HTTP_FORWARDED

REMOTE_USER

HTTP_HOST

REMOTE_IDENT

HTTP_PROXY_CONNECTION

REQUEST_METHOD

HTTP_ACCEPT

SCRIPT_FILENAME

Server internals

PATH_INFO

DOCUMENT_ROOT

AUTH_TYPE

 

56  Apache Server 變量


 

Apache Server 變量(續)

HTTP頭部

連接和請求

SERVER_ADMIN

Date and time

SERVER_ADDR

TIME_YEAR

SERVER_PORT

TIME_MON

SERVER_PROTOCOL

TIME_DAY

Special

TIME-MIN

API_VERSION

TIME_WDAY

THE_REQUEST

TIME

REQUEST_URI

 

REQUEST_FILENAME

 

IS_SUBREQ

 

HTTPS

 

 

56  Apache Server 變量(續)

 

 

Matching Directives

       另外一些Apache命令有效的利用了正則表達式。以下是最通用的幾個命令。

 

AliasMatch pattern file-path|directory-path

       URLs映射到文件系統的一個位置。使用子匹配變量$1...$n來訪問文件路徑結果中的子匹配。

 

<DirectoryMath pattern>...</DirectiryMatch>

       當文件系統目錄匹配pattern時,使用最近的一個定向。

 

<FilesMatch pattern>...</FilesMatch>

       當文件匹配pattern時,使用最近的一個定向。

 

<LocationMatch pattern>...</LocationMatch>

       URL匹配pattern時,使用最近的一個定向。

 

<ProxyMatch pattern>...</ProxyMatch>

       URL匹配pattern時,使用最近的一個定向。

 

實例

實例31 簡單匹配

 

實例31 簡單匹配

# Rewrite /foo to /bar

RewriteEngine On

RewriteRule ^/foo$ /bar

 

 

實例32 匹配和歸組

 

實例32匹配和歸組

# Rewrite pretty url as script parameters

RewriteRule ^/(/w+)/(/d+) /index.php?action=$1&id=$2

 

 

實例33 重寫條件

 

實例33 重寫條件

# Limit admin url to internal IP addresses

 

RewriteCond %{REMOTE_ADDR} !192.168./d*./d*

RewriteCond %{PATH_INFO} ^admin

RewriteRule .* - [F]

 

 

實例34 重定向

 

實例34重定向

# Make sure admin urls are served over SSL

RewriteCond %{SERVER_PORT} !^443$

RewriteRule ^/admin/(.*)$ https://www.example.com/admin/$1

[L,R]

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章