Apache中偽靜態Rewrite的使用方法和URL重寫規則表達式講解

apache中的mod_rewrite模塊提供瞭一個基於正則表達式分析器的重寫引擎來實時重寫URL請求,主要的功能就是實現URL的跳轉,它的正則表達式是基於Perl語言。可基於服務器級的(httpd.conf)和目錄級的(.htaccess)兩種方式,允許通過它來改變Apache Web服務器的配置。它支持每個完整規則可以擁有不限數量的子規則以及附加條件規則的靈活而且強大的URL操作機制。此URL操作可以依賴於各種測試,比如服務器變量、環境變量、HTTP頭、時間標記,甚至各種格式的用於匹配URL組成部分的查找數據庫。

而配置偽靜態的方法,需要根據web服務器的不同來做不同的配置,一般常用的有Apache服務器和Nginx服務器,本篇隻介紹在Apache服務器上開啟和通過.htaccess文件來配置偽靜態的方法。

一、安裝rewrite模塊

如果要想用到rewrite模塊,必須確保在已安裝或加載rewrite模塊。一般在編譯apache的時候就安裝瞭rewrite模塊。

二、配置文件httpd.conf中啟用Rewrite

打開Apache配置文件httpd.conf,找到代碼:

#LoadModule rewrite_module modules/mod_rewrite.so

把前面#去掉。沒有則添加,但必須獨占一行,使apache支持 mod_rewrite 模塊。

三、在服務器中找到配置文件vhosts.conf,啟用.htaccess

打開虛擬機配置文件vhosts.conf,找到代碼:

AllowOverride None 修改為: AllowOverride All

使Apache支持 .htaccess 文件

四、在要啟用偽靜態的項目根目錄下建立 .htaccess 文件

在.htaccess 文件中輸入內容,示例如下

< IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule RewriteRule index.html$ index.php
#RewriteRule ^(.*?).html$ index.php?$1.html [QSA,PT,L]
#RewriteRule ^/index([0-9]*).html$ /index.php?id=$1
#更多偽靜態規則
< /IfModule>

// RewriteEngine on 為 啟動rewrite引擎

// RewriteRule 部分為自己的偽靜態規則

五、重啟Apache服務器,就OK瞭

六、參數補充說明

1、RewriteEngine 為重寫引擎開關,on為開啟,off為關閉。

2、RewriteRule 是路由轉向規則,之前路徑為瀏覽器中要輸入路徑,這裡可以用正則表達式表達。+空格 後路徑為後臺實際轉向路徑。

3、轉向後臺實際路徑時可以傳參數,$1 代表瀏覽器路徑中輸入的第一個正則表達式的值,以此類推,$2代表第二個正則表達式的值。

4、RewriteRule 路由轉向規則裡正則表達式用括號 () 括起來。

5、在RewriteRule寫法中,^表示語句開始,$ 表示語句的結束,L 表明當前規則是最後一條規則,停止分析以後重寫,NC表示不區分大小寫,QSA表示追加請求的字符串。

RewriteRule規則表達式的說明:
. 匹配任何單字符
[chars] 匹配字符串:chars
[^chars] 不匹配字符串:chars
text1|text2 可選擇的字符串:text1或text2
? 匹配0到1個字符
* 匹配0到多個字符
+ 匹配1到多個字符
^ 字符串開始標志
$ 字符串結束標志
\n 轉義符標志

6、補充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) 不在輸出轉義特殊字符

到此這篇關於Apache中偽靜態Rewrite的使用方法和URL重寫規則表達式講解的文章就介紹到這瞭,更多相關∪rL重寫偽靜態Rewrite內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: