天天看點

nginx url rewrite之thinkphp示例

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\/(.*)$/

正則的比對分析

nginx url rewrite之thinkphp示例

- 使用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;

繼續閱讀