1、Rewrite規則簡介:
Rewirte主要的功能就是實現URL的跳轉,它的正則表達式是基於 Perl語言。可基於服務器級的(httpd.conf)和目錄級的 (.htaccess)兩種方式。若是要想用到rewrite模塊,必須先安裝或加載rewrite模塊。方法有兩種一種是編譯apache的時候就直接 安裝rewrite模塊,別一種是編譯apache時以DSO模式安裝apache,而後再利用源碼和apxs來安裝rewrite模塊。
2、在Apache配置中啓用Rewrite
打開配置文件httpd.conf:php
2.啓用.htaccess
在虛擬機配置項中
AllowOverride None 修改成: AllowOverride Allhtml
2、Rewrite基本寫法
服務器有配置文件不可能由咱們來改,因此大多狀況下要在網站的根目錄下建一個.htaccess文件。正則表達式
3、Apache mod_rewrite規則重寫的標誌一覽
1) R[=code](force redirect) 強制外部重定向
強制在替代字符串加上http://thishost[:thisport]/前綴重定向到外部的URL.若是code不指定,將用缺省的302 HTTP狀態碼。
2) F(force URL to be forbidden)禁用URL,返回403HTTP狀態碼。
3) G(force URL to be gone) 強制URL爲GONE,返回410HTTP狀態碼。
4) P(force proxy) 強制使用代理轉發。
5) L(last rule) 代表當前規則是最後一條規則,中止分析之後規則的重寫。
6) N(next round) 從新從第一條規則開始運行重寫過程。
7) C(chained with next rule) 與下一條規則關聯
若是規則匹配則正常處理,該標誌無效,若是不匹配,那麼下面全部關聯的規則都跳過。
8) T=MIME-type(force MIME type) 強制MIME類型
9) NS (used only if no internal sub-request) 只用於不是內部子請求
10) NC(no case) 不區分大小寫
11) QSA(query string append) 追加請求字符串
12) NE(no URI escaping of output) 不在輸出轉義特殊字符
例如:RewriteRule /foo/(.*) /bar?arg=P1%3d$1 [R,NE] 將能正確的將/foo/zoo轉換成/bar?arg=P1=zoo
13) PT(pass through to next handler) 傳遞給下一個處理
例如:apache
14) S=num(skip next rule(s)) 跳過num條規則
15) E=VAR:VAL(set environment variable) 設置環境變量api
4、Apache rewrite例子
例子一:
同時達到下面兩個要求:
1.用http://www.jb51.net/xxx.php 來訪問 http://www.jb51.net/xxx/
2.用http://yyy.jb51.net 來訪問 http://www.jb51.net/user.php?username=yyy 的功能服務器
例子二:
app
RewriteRule ^/type([0-9]+).html$ /type.php?typeid=$1 [PT]
RewriteRule ^/type([0-9]+)page([0-9]+).html$ /type.php?typeid=$1&page=$2 [PT]ide