nginx配置rewrite

1. uri  和 url讀取區別php

區別就是URI定義資源,而URL不單定義這個資源,還定義瞭如何找到這個資源。nginx

好比說,一個服務器上,到一個文件夾/網頁的絕對地址(absolute path)就是URI。web

Nginx的rewirte是針對 uri的 不是url.服務器

 

2. location的使用app

    location / { 
        rewrite ^.*$ /index.php last;
    }   
# /是通用的目錄  全部沒有匹配的rewite的最後都會用/匹配
    location ~ ^/asset/ {
            root /home/users/work/webroot/public/fe;
    }   
#~ 開頭表示區分大小寫的正則匹配    這裏是匹配下一級目錄/asset/開頭
#~*  開頭表示不區分大小寫的正則匹配
#!~和!~*分別爲區分大小寫不匹配及不區分大小寫不匹配 的正則

    location ~ ^/dep/ {
            root /home/users/work/webroot/public/fe;
    }   
# dep同上, 匹配/dep/目錄, 當訪問/dep目錄時, 網站的根目錄會變爲
fe
    location ~ ^/page/.*/asset-\d+/ {
            root /home/users/work/webroot/public/fes;
    }   
# 此處爲匹配page目錄下asset後有數字的目錄,/page/目錄時, 網站的根目錄會變爲fes

    location ~\.php$ {
        root            /home/users/work/webroot/public;
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_param   SCRIPT_FILENAME        $document_root$fastcgi_script_name;
        fastcgi_index   index.php;
        include         fastcgi.conf;
    } 
#以上結果都不匹配, location是.php結尾,注意這裏是\不是/ 用來轉義.的, $是以.php結尾的意思, 這裏就把全部的.php的請求都重定向到/home/users/work/webroot/public 下, 而且使用fastcgi協議經過127.0.0.1:9000轉發請求,  fastcgi_param定義各個參數, 具體含義以下表,  這裏的$document_root$fastcgi_script_name 就是/home/users/work/webroot/public/index.php 請求腳本的路徑和名稱

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#腳本文件請求的路徑
fastcgi_param QUERY_STRING $query_string; #請求的參數;如?app=123
fastcgi_param REQUEST_METHOD $request_method; #請求的動做(GET,POST)
fastcgi_param CONTENT_TYPE $content_type; #請求頭中的Content-Type字段
fastcgi_param CONTENT_LENGTH $content_length; #請求頭中的Content-length字段。框架

 
 

fastcgi_param SCRIPT_NAME $fastcgi_script_name; #腳本名稱
fastcgi_param REQUEST_URI $request_uri; #請求的地址不帶參數
fastcgi_param DOCUMENT_URI $document_uri; #與$uri相同。
fastcgi_param DOCUMENT_ROOT $document_root; #網站的根目錄。在server配置中root指令中指定的值
fastcgi_param SERVER_PROTOCOL $server_protocol; #請求使用的協議,一般是HTTP/1.0或HTTP/1.1。 網站

 
 

fastcgi_param GATEWAY_INTERFACE CGI/1.1;#cgi 版本
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;#nginx 版本號,可修改、隱藏ui

 
 

fastcgi_param REMOTE_ADDR $remote_addr; #客戶端IP
fastcgi_param REMOTE_PORT $remote_port; #客戶端端口
fastcgi_param SERVER_ADDR $server_addr; #服務器IP地址
fastcgi_param SERVER_PORT $server_port; #服務器端口
fastcgi_param SERVER_NAME $server_name; #服務器名,域名在server配置中指定的server_nameurl

 
 

#fastcgi_param PATH_INFO $path_info;#可自定義變量spa

 
 

# PHP only, required if PHP was built with --enable-force-cgi-redirect
#fastcgi_param REDIRECT_STATUS 200;

 
 

在php可打印出上面的服務環境變量
如:echo $_SERVER['REMOTE_ADDR']


還見過一個簡便的使用框架的寫法,全部的location凡是uri指定的文件不存在則重定向到 /index.php?s=$uri上。
location / { 

    if (!-e $request_filename) { 

        rewrite  ^(.*)$  /index.php?s=$1  last; 

        break;   

    } 

}
相關文章
相關標籤/搜索