首頁 > 軟體

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

2022-11-21 14:02:48

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內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com