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;
}
}