Rewrite規則學習及使用

轉自:http://wenku.baidu.com/link?url=OUReKjbia5mVXuDfNDUjtVHxBvUEomN4Y3nD9PgqNz3jfq0Zh_jwD3mhM_rLD1JM2FUsJKZ5btmrLgfND615-zyscLiT6gQUCzqttzE5Tse
php

一.簡介html

   Apache是世界使用排名第一的Web服務器軟件。它能夠運行在幾乎全部普遍使用的計算機平臺上,因爲其跨平臺和安全性被普遍使用,是最流行的Web服務器端軟件之一。因此瞭解Apache的rewrite規則很是重要,能夠實現URL的僞靜態。或者作301跳轉。web

 

二.安裝模塊正則表達式

 1.檢查是否安裝模塊apache

   httpd -l |grep rewrite.c api

 1)若是是首次安裝就須要此功能直接添加編譯參數瀏覽器

   ./configure --enable-rewrite 安全

 2)若是存在模塊服務器

   直接修改配置文件網絡

   在相關域中開啓此功能模塊

     vi htttpd.conf 

  修改成

   <Directory "YourDocumentRoot"> 

     Options       FollowSymLinks ExecCGI Includes 

       AllowOverride     All 

       Order         allow,deny 

     Allow from      all 

  </Directory>

3)若是不存在此模塊

 移動到apache 的源碼包編譯加載此模塊

   cd   /home/apache/httpd-2.2.4/modules/mappers 

   /usr/local/apache/bin/apxs -c mod_rewrite.c 

  /usr/local/apache/bin/apxs -i -a -n mod_rewrite mod_rewrite.la 

   若是沒有什麼錯誤的話,應該在你的apache的modules目錄中編譯出一個mod_rewrite.so文件。

   編輯httpd.conf文件,確認httpd.conf中已經包含mod_rewrite.so的加載語句,以下:

  LoadModule rewrite_module modules/mod_rewrite.so

  這時,你的apache應該已經支持rewrite。

  重啓服務器apache使配置生效

  service  httpd   restart 

 

 

重啓服務器apache使配置生效 service  httpd   restart 
 
三.規則說明 
 
1.經常使用正則表達式含義  
? 0-1個字符            .   1個字符 

*  0-x個字符              +  1-x個字符 

^  段落開始字符           $   段落結束字符 

\  轉移字符               !  取反 

( ) 內存限定傳值   [0-9]   全部數字字符  

[a-z]全部小寫字母   [A-Z]  全部大寫字母

 

2.模塊使用參數(.htaccess) 
RewriteEngine     On     是否打開模塊 

RewriteCond              條件

RewriteRule       [  ]    規則設定

 

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\=$1 [R,NE] 將能正確的將/foo/zoo轉換成/bar?arg=P1=zed 
13) PT(pass through to next handler) 傳遞給下一個處理 

例如:RewriteRule ^/abc(.*) /def$1 [PT] # 將會交給/def規則處理 Alias /def /ghi 
14) S=num(skip next rule(s)) 跳過num條規則 
15) E=VAR:VAL(set environment variable) 設置環境變量

 

3服務器請求端信息列表(拓展見五內容) 
RewriteCond  %{server_prot}  !^80$    請求非80端口的 

RewriteCond  $[request_filename]   !-d  請求文件類型爲非文件夾              

$[request_filename]   !-f  請求文件類型爲非文件 

RewriteRule   .?     /404.html    [L]   轉發強寫入404頁面並結束上面條件生效 

RewriteCond  %{http_referer}    !^$ 
RewriteCond  %{http_referer}    !^http://192.168.1.131 

RewriteRule  \.(gif|jpeg|png|bmp)  noimg.html       [L] 

 

四.實例解析 
 
<IfModule mod_rewrite.c> 

RewriteEngine  On 
RewriteCond  %{server_prot}  !^80$ 
RewriteRule  ^(.*)$  http://www.baidu.com/$1 [R,L] 

RewriteRule  ^(\d+)\.html$   p.php?id=$1  [L] 

#RewriteRule  ^/(.+)$      $1?id=1   [L] 

</IfModule>

 

五.其餘參數 
 
Apache Rewrite服務器變量介紹 
Rewrite做爲 Web 服務器的核心功能之一,提供了經過正則表達式與請求路徑的匹配,同時還提供了一個系統級變量供調用,本篇文章主要介紹Apache 中Rewrite模塊的服務器變量信息,  
Apache提供給rewirte模塊的環境變量大概分紅5個類型. 下面一一說明.如下列表傳於apache官方文檔.

 

第一部分: HTTP headers 部分參數 

 
參數名稱: HTTP_USER_AGENT 
樣例參考值: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8 
說明: 至關於PHP中的服務器參數: $_SERVER["HTTP_USER_AGENT"]  


參數名稱: HTTP_REFERER 
樣例參考值: http://www.test.cn/test.php 
說明: 至關於PHP中的服務器參數: _SERVER["HTTP_REFERER"]  


參數名稱: HTTP_COOKIE 
樣例參考值: ZDEDebuggerPresent=php,phtml,php3 
說明: 至關於PHP中的服務器參數: $_SERVER["HTTP_COOKIE"]

參數名稱: HTTP_FORWARDED 
樣例參考值: 若是使用代理服務器的話會是代理服務器的IP地址, 本地不容易搭環境測試出值來. 
說明: 至關於PHP中的服務器參數: $_SERVER["HTTP_FORWARDED"]  


參數名稱: HTTP_HOST 
樣例參考值: www.test.com 
說明: 至關於PHP中的服務器參數: $_SERVER["HTTP_HOST"]  


參數名稱: HTTP_PROXY_CONNECTION 
樣例參考值: 網絡鏈接代理方面的信息. 和HTTP_FORWARDED參數同樣. 本地不容易搭環境測試出值來. 
說明: PHP中貌似未提供這樣的服務器信息值. 若是又的話可能等值於: $_SERVER["HTTP_PROXY_CONNECTION"]  


參數名稱: HTTP_ACCEPT 
樣例參考值: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 說明: 至關於PHP中的服務器參數: $_SERVER["HTTP_ACCEPT"]

 

第二部分: server internals 部分參數  


參數名稱: DOCUMENT_ROOT 樣例參考值: C:/webRoot/t 
說明: 至關於PHP中的服務器參數: $_SERVER["DOCUMENT_ROOT"]  


參數名稱: SERVER_ADMIN 
樣例參考值: youemailaddress@gmail.com 
說明: 至關於PHP中的服務器參數: $_SERVER["SERVER_ADMIN"]  


參數名稱: SERVER_NAME 樣例參考值: www.test.com 
說明: 至關於PHP中的服務器參數: $_SERVER["SERVER_NAME"]  


參數名稱: SERVER_ADDR 樣例參考值: 127.0.0.1 
說明: 至關於PHP中的服務器參數: $_SERVER["SERVER_ADDR"]  


參數名稱: SERVER_PORT 樣例參考值: 80 
說明: 至關於PHP中的服務器參數: $_SERVER["SERVER_PORT"] 

 
參數名稱: SERVER_SOFTWARE 
樣例參考值: Apache/2.2.11 (Win32) PHP/5.2.9-1 
說明: 至關於PHP中的服務器參數: $_SERVER["SERVER_SOFTWARE"] 

 

參數名稱: SERVER_PROTOCOL 樣例參考值: HTTP/1.1 
說明: 至關於PHP中的服務器參數: $_SERVER["SERVER_PROTOCOL"]

 

第三部分: connection & request 部分參數  


參數名稱: REMOTE_ADDR 
樣例參考值: 127.0.0.1 正在瀏覽當前頁面用戶的 IP 地址。 說明: 至關於PHP中的服務器參數: $_SERVER["REMOTE_ADDR"]  


參數名稱: REMOTE_HOST 
樣例參考值: 127.0.0.1 正在瀏覽當前頁面用戶的主機名。反向域名解析基於該用戶的 REMOTE_ADDR 
說明: 至關於PHP中的服務器參數: $_SERVER["REMOTE_HOST"]  


參數名稱: REMOTE_PORT 
樣例參考值: 2574 (變化的值)用戶鏈接到服務器時所使用的端口 說明: 至關於PHP中的服務器參數: $_SERVER["REMOTE_PORT"]  


參數名稱: REMOTE_USER 樣例參考值: 空 
說明: PHP 好像未提供相關的$_SERVER值.  


參數名稱: REMOTE_IDENT 樣例參考值: 空 
說明: PHP 好像未提供相關的$_SERVER值.

參數名稱: REQUEST_METHOD 樣例參考值: GET 
說明: 至關於PHP中的服務器參數: $_SERVER["REQUEST_METHOD"]  


參數名稱: SCRIPT_FILENAME 
樣例參考值: C:/webRoot/t/share77.html 
說明: 至關於PHP中的服務器參數: $_SERVER["SCRIPT_FILENAME"]  


參數名稱: PATH_INFO 樣例參考值: 空 
說明: 至關於PHP中的服務器參數: $_REQUEST["PATH_INFO"]  


參數名稱: QUERY_STRING 樣例參考值: a=b&c=d&e=f 
說明: 至關於PHP中的服務器參數: $_SERVER["QUERY_STRING"]

 

參數名稱: AUTH_TYPE 
樣例參考值: 空 當 PHP 運行在 Apache 模塊方式下,而且正在使用 HTTP 認證功能,這個是認證的類型 
說明: 至關於PHP中的服務器參數: $_SERVER["AUTH_TYPE"] 

 

第四部分: date and time 部分參數  


參數名稱: TIME_YEAR 樣例參考值: 2009 
說明: 服務器獲取當前的年份值  


參數名稱: TIME_MON 樣例參考值: 04 
說明: 服務器獲取當前的月份值  


參數名稱: TIME_DAY 樣例參考值: 22 
說明: 服務器獲取當前的日值  


參數名稱: TIME_HOUR 樣例參考值: 16 
說明: 服務器獲取當前時間的小時  


參數名稱: TIME_MIN 樣例參考值: 26 
說明: 服務器獲取當前時間的分鐘

參數名稱: TIME_SEC 樣例參考值: 34 
說明: 服務器獲取當前時間的秒  


參數名稱: TIME_WDAY 樣例參考值: 3 
說明: 服務器獲取當天是星期幾, 從星期日-星期六, 數字從 0-6  


參數名稱: TIME 
樣例參考值: 20090422162634 
說明: 服務器獲取當前的時間, 格式爲: 年月日時分秒

第五部分: specials 部分參數  


參數名稱: API_VERSION 樣例參考值: 20051115:21 
說明: apache 的 API 版本信息. 

參數名稱: THE_REQUEST 
樣例參考值: GET /share77.html HTTP/1.1 
說明: 瀏覽器發給服務器的請求值. 不包括其餘的頭信息. 

 
參數名稱: REQUEST_URI 樣例參考值: /share77.html 

說明: 瀏覽器請求的資源信息.

參數名稱: REQUEST_FILENAME 
樣例參考值: C:/webRoot/t/share77.html 說明: 被請求的資源的在磁盤的物理地址. 

 
參數名稱: IS_SUBREQ 樣例參考值: false 
說明: 若是是 sub-request 則顯示爲 true, 不然爲 false.  

參數名稱: HTTPS 樣例參考值: off 說明: 若是鏈接使用 SSL/TLS 模式, 則值爲on , 不然值爲off, 這個參數比較安全, 即便未載入 mod_ssl 模塊時.

相關文章
相關標籤/搜索