標籤:ram file dir 虛擬 idt lnmp環境 linux環境 地址 htm
LNMP1.3一鍵安裝Linux環境,配置Nginx運行ThinkPHP3.2
你是否遇見過:安裝LNMP1.3環境後,運行ThinkPHP 3.2,只能開啟首頁,不能存取控制器,報404錯誤。
按照以下3步設定,即可解決。
ThinkPHP支援的URL模式有四種:普通模式、PATHINFO、REWRITE和相容模式,系統預設的PATHINFO模式。
LNMP1.3 一鍵安裝完成後,預設支援REWRITE,需要手動開啟 PATHINFO。
第1步修改:php.ini檔案
位置:/usr/local/php/etc/php.ini
搜尋尋找到:cgi.fix_pathinfo 配置項,預設為0,修改為1,開啟 pathinfo 選項。
1:
第2步修改:nginx的設定檔 (筆者使用的是虛擬網域名稱設定檔:/usr/local/nginx/conf/vhost/*.conf)
找到 server 的配置選項:
預設只有 include enable-php.conf,請注釋掉;
然後添加一行:include enable-php-pathinfo.conf
如:
123 |
#error_page 404 /404.html;#include enable-php.conf; # 註冊這一行include enable-php-pathinfo.conf; # 加入這行 |
2:
繼續修改,在添加下面配置資訊:
1234567891011121314151617 |
location ~ .php{ set $path_info ""; set $real_script_name $fastcgi_script_name; #如果地址與引號內的Regex匹配 if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") { #將檔案地址賦值給變數 $real_script_name set $real_script_name $1; #將檔案地址後的參數賦值給變數 $path_info set $path_info $2; } #配置fastcgi的一些參數 fastcgi_param SCRIPT_FILENAME $document_root$real_script_name; fastcgi_param SCRIPT_NAME $real_script_name; fastcgi_param PATH_INFO $path_info;} |
在Nginx,可以通過在Nginx.conf中配置轉寄規則實現,解決其他不支援PATHINFO的WEB伺服器環境。
#如果請求既不是一個檔案,也不是一個目錄,則執行一下重寫規則
1234567 |
if (!-e $request_filename){#地址作為將參數rewrite到index.php上。rewrite ^/(.*)$ /index.php/$1;#若是子目錄則使用下面這句,將subdir改成目錄名稱即可。#rewrite ^/subdir/(.*)$ /subdir/index.php/$1;} |
官方出處:http://document.thinkphp.cn/manual_3_2.html#url_rewrite
第3步:重啟LNMP環境,配置生效。
最終效果測試:
1. 去掉了 index.php
2. 可以存取控制器下的方法。
3. U 方法正確。
3:
參考:筆者設定檔樣本:
12345678910111213141516171819202122232425262728293031323334353637383940414243 |
server { listen 80; #listen [::]:80; server_name tp32.com; index index.html index.htm index.php default.html default.htm default.php; root /home/wwwroot/tp32.com; include other.conf; #error_page 404 /404.html; #include enable-php.conf; include enable-php-pathinfo.conf; #加入這行 location ~ .php { set $path_info ""; set $real_script_name $fastcgi_script_name; #如果地址與引號內的Regex匹配 if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") { #將檔案地址賦值給變數 $real_script_name set $real_script_name $1; #將檔案地址後的參數賦值給變數 $path_info set $path_info $2; } #配置fastcgi的一些參數 fastcgi_param SCRIPT_FILENAME $document_root$real_script_name; fastcgi_param SCRIPT_NAME $real_script_name; fastcgi_param PATH_INFO $path_info; } #如果請求既不是一個檔案,也不是一個目錄,則執行一下重寫規則 if (!-e $request_filename) { #地址作為將參數rewrite到index.php上。 rewrite ^/(.*)$ /index.php/$1; #若是子目錄則使用下面這句,將subdir改成目錄名稱即可。 #rewrite ^/subdir/(.*)$ /subdir/index.php/$1; } access_log /home/wwwlogs/tp32.com.log; } |
入口檔案index.php
12 |
//nginx環境下防止U方法輸出錯誤define(‘__APP__‘, ‘‘); |
參考:
http://www.thinkphp.cn/topic/3138.html
LNMP1.3一鍵安裝Linux環境,配置Nginx運行ThinkPHP3.2