pathinfo是什麼:
php
path_info不是nginx的功能,它是php的功能。php有兩個pathinfo,一個是環境變量$_SERVER['PATH_INFO'] ,另外一個是函數path_info();html
path_info()的功能是能夠將輸入的url作判斷,並返回對url的解析,但nginx並非做用於它。linux
想要對他們兩個有更深刻了解能夠去這裏看看:nginx
http://www.2cto.com/os/201212/176543.html
vim
nginx能夠可設置的是$_SERVER['PATH_INFO']的值。服務器
$_SERVER['PATH_INFO']的做用是返回url的一部分,並用與重寫。函數
nginx的配置:阿里雲
進入阿里雲的控制檯,輸入命令 : cd usr/local/nginx/conf回車(這是我阿里雲的linux的nginx配置文件的路徑,不知作別人家的會不會不一樣,不一樣也不要緊,反正目標是nginx.conf文件),進入的conf文件夾,繼續輸入命令 vim nginx.conf回車url
打開了nginx.conf配置文件,按 i 鍵,找到http下的server下開始配置:unix
location / { if (!-e $request_filename) { rewrite ^/(.*)$ /index.php/$1 last; break; } } location ~ \.php { fastcgi_pass 127.0.0.1:9000; //這裏不用擔憂你的服務器的ip是否和這個不同,不用懷疑, //這樣寫就好了 fastcgi_index index.php; include fcgi.conf; set $script $fastcgi_script_name; if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") { //上行的if和「(」間要有空格,這是lunix的語法,否則會報錯 //報位置變量 set $script $1; //注意這裏是1234的1不是字母l set $path_info $2; } fastcgi_param SCRIPT_FILENAME $document_root$script; fastcgi_param SCRIPT_NAME $script; fastcgi_param PATH_INFO $path_info; }
到這裏就完成配置,接下來就重啓一下nginx,我不曉得別的重啓方法,個人重啓方法是重啓amh我使用了amh面板的,另外說一句amh的重啓命令。先是cd回根目錄,找etc目錄,cd進去,而後輸入:init.d/amh-start回車。
還有另一種配置方法:
location ~ \.php { #去掉$ root H:/PHPServer/WWW; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; #增長這一句 fastcgi_param PATH_INFO $fastcgi_path_info; #增長這一句 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
接下來的步驟和上面同樣。
這兩種方法我都實踐過,都是能夠支持ThinkPHP的,可是第二種有點缺陷,我原先放在阿里雲的用原生PHP的寫的Web就訪問不了,而後我換了第二種配置,完美支持。
題外:
Apache是默認支持path_info, 而nginx不支持,對於剛接觸的人可能會由於以爲配置nginx的pathinfo會很麻煩而止步,裝回Apache。我想說請不要這麼作,由於比起Apache,nginx更加穩定更增強大,並且咱們由於麻煩就止步,這可不是進步的節奏。
這是一篇分析Apache和nginx的技術blog:http://www.cnblogs.com/huangye-dream/p/3550328.html