Nginx 開啟 PATHINFO
在這之前, 筆者也到搜索引擎上看了幾篇關于 Nginx 設置 PATHINFO 的要領, 感受有點亂, 亂的原因主要是由于 Nginx 沒有給以像 Apache 那樣一個參數即可開啟 PATHINFO 的精采支持, 因此呈現了各類 Nginx 下開啟 PATHINFO 的解法。
這里提供的是參閱 Nginx 官方文檔并團結實測可用后的 PATHINFO 的方案。去除不必需的注釋, Nginx 開啟 PATHINFO 的 server 部門設置如下:
server {
listen 80;
server_name localhost;
location / {
root D:/Projects/Demo/thinkphp; # 你的 TP 框架 index.php 地址目次, 記得用 / 支解路徑
index index.php index.html index.htm;
}
# ...
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ ^(.+\.php)(.*)$ {
root D:/Projects/Demo/thinkphp; # 你的 TP 框架 index.php 地址目次, 記得用 / 支解路徑
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
這種做法的道理是當請求的會見路徑中含有 .php 時, 通過正則表達式結構出 PATHINFO, 并配置到 fastcgi 的參數 PATH_INFO 中。
代碼中匹配 PATH_INFO 的正則表達式來歷于 Nginx 官方文檔中的寫法。拜見: http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_split_path_info
PATHINFO 模式是 ThinkPHP 默認的 URL 模式, 因此不需要修改 ThinkPHP 的默認設置即可利用 http://serverName/index.php/模塊/節制器/操縱 方法會見。
URL REWRITE 模式
REWRITE 模式也稱 URL重寫, 可用于埋沒 PATHINFO 模式路徑中的 index.php, 開啟 REWRITE 模式的 Nginx 設置為:
server {
listen 80;
server_name localhost;
location / {
root D:/Projects/Demo/thinkphp; # 你的 TP 框架 index.php 地址目次, 記得用 / 支解路徑
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?s=$uri; # 焦點
}
# ...
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root D:/Projects/Demo/thinkphp; # 你的 TP 框架 index.php 地址目次, 記得用 / 支解路徑
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
設置完成后修改 ThinkPHP 的 URL 模式為 REWRITE, 編輯設置文件 ThinkPHP/Conf/convention.php 中修改 URL_MODEL 參數值為 2 (REWRITE 模式)即可通過 http://serverName/模塊/節制器/操縱 方法會見。
,