nginx url rewrite
Rewrite 主要的功能就是實作URL的重寫,Nginx的Rewrite規則采用Pcre,perl相容正規表達式的文法規則比對,如果需要Nginx的Rewrite功能,在編譯Nginx之前,需要編譯安裝PCRE庫。
通過Rewrite規則,可以實作規範的URL、根據變量來做URL轉向及選擇配置。
- PCRE
PCRE(Perl Compatible Regular Expressions)是一個Perl庫,包括 perl 相容的正規表達式庫。
在使用thinkphp時,我們可能會用到url rewrite。例如:
location / {
root html;
if (!-e $request_filename)
{
#位址作為将參數rewrite到index.php上。
#rewrite ^/(.*)$ /index.php/$1;
#若是子目錄則使用下面這句,将subdir改成目錄名稱即可。
rewrite ^/ceshi/(.*)$ /ceshi/index.php/$1;
rewrite ^/myblog/(.*)$ /myblog/index.php/$1;
#rewrite ^/go/(.*)$ /go/index.php/$1;
}
index index.html index.htm;
#如果請求既不是一個檔案,也不是一個目錄,則執行一下重寫規則
}
符号 | 功能 |
---|---|
~ | 區分大小寫比對 |
~* | 不區分大小寫比對 |
!~ | 區分大小寫不比對 |
!~* | 不區分大小寫不比對 |
^ | 以什麼開頭的比對 |
^~ | 隻需要前半部分比對 |
= | 完全比對 |
$ | 以什麼結尾的比對 |
|轉義字元 |
- `/ ` 比對任何查詢,因為所有請求都以 / 開頭。但是正規表達式規則和長的塊規則将被優先和查詢比對 - `^~ /images/ ` 不區分大小寫比對任何以/images/開頭的任何查詢并且停止搜尋。任何其他正規表達式将不會被測試 - `~* .(gif|jpg|jpeg) ‘區分大小寫比對任何以.gif、.jpg或.jpeg結尾的請求−‘ \.php ` 區分大小寫比對任何以.php結尾的請求 - `~ \.php` 區分大小寫比對任何包含.php的請求
nginx正則示例
-
/
比對任何查詢,因為所有請求都已 / 開頭。但是正規表達式規則和長的塊規則将被優先和查詢比對
-
^~ /images/
比對任何已/images/開頭的任何查詢并且停止搜尋。任何其他正規表達式将不會被測試
-
~* .(gif|jpg|jpeg)$
比對任何已.gif、.jpg 或 .jpeg 結尾的請求
-
nginx正則如何測的$1,2等參數
nginx使用PCRE的正則,是以可以通過以下兩種:
執行個體:
- rewrite内容
rewrite ^/ceshi/(.*)$ /ceshi/index.php/$1;
- 正則内容
/^\/ceshi\/(.*)$/
- 測試比對
/ceshi/Service/Analysis/show
-
https://regex101.com/#pcre
對
/^\/ceshi\/(.*)$/
正則的比對分析
- 使用php代碼
$reg = "/^\/ceshi\/(.*)$/";
$testData = "/ceshi/Service/Analysis/show";
preg_match($reg, $testData, $matchs);
print_r($matchs);
#輸出
Array
(
[] => /ceshi/Service/Analysis/show
[] => Service/Analysis/show
)
通過以上兩種工具可以的到,$1=Service/Analysis/show,rewrite後位址為:
/ceshi/index.php/Service/Analysis/show;