問題簡述:thinkphp5怎麼在url訪問中去掉public。
實驗環境:
Linux、nginx、mysql、php(lnmp一鍵整合1.4測試版,更多資訊lnmp.org)
本文兼顧的問題:
1.安全的配置(同一vps多網站)
2.友好的網站入口
部署問題重述:
由於thinkphp5經過重構,和thinkphp3.2有很大的不同,其中之前的入口檔案index.php由/index.php改為/public/index.php,
那麼問題來了:
1.如果按lnmpIntegration Environment提供的方法(lnmp vhost add)添加虛擬網站,訪問網站就要加個二級目錄,如
http://xxx.com/public
所以為了可以讓訪問連結變得更加友好(即http://xxx.com),可以修改/usr/local/nginx/conf/vhost/xxx.com.conf(下稱“專屬配置”)
root /home/wwwroot/xxx.com/;
改為:
root /home/wwwroot/xxx.com/public;
那麼問題來了,由於lnmp環境考慮到虛擬網站各自的訪問目錄許可權問題,於是在/usr/local/nginx/conf/fastcgi.conf
裡配置了
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";
那麼每個網站的存取權限就限制在各自的document_root裡了,
於是,我們修改的root(root /home/wwwroot/xxx.com/public;)就把許可權限制在public目錄之後,
軟體架構根目錄下的application等都無法訪問了,那麼此時我們要解決的問題是:
2.既要保持root /home/wwwroot/xxx.com/public;,又要讓虛擬網站有/home/wwwroot/xxx.com目錄的存取權限,
那麼可以修改/usr/local/nginx/conf/fastcgi.conf設定檔:
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";
改為:
fastcgi_param PHP_ADMIN_VALUE "open_basedir=/home/wwwroot/xxx.com/:/tmp/:/proc/";
但問題來了,/usr/local/nginx/conf/fastcgi.conf是公用設定檔,採用這種寫死的方式會導致其他網站不可用,
為了兼顧其他虛擬網站,if_not_empty派上用場了,
修改方法為:
不改變/usr/local/nginx/conf/fastcgi.conf設定檔裡的原配置,而在
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";
之後添加
fastcgi_param PHP_ADMIN_VALUE $basedir if_not_empty;#注意nginx要在1.1.11版本之後
$basedir變數就可以在/usr/local/nginx/conf/vhost/xxx.com.conf設定檔裡的include enable-php.conf前賦值:
set $basedir "open_basedir=/home/wwwroot/dev.yunshare.net/:/tmp/:/proc/";
優點:這樣既滿足了thinkphp5的部署要求,又不影響其他一般網站的使用。
缺點:如果$basedir沒有賦值(至少一個專屬配置有賦值),nginx -t無法通過。
注意rewrite規則:
最後獻上thinkphp的rewrite規則:
這種寫法3.2是可以的,但在這裡是不可以的,否則經測試pathinfo為空白
location / { try_files $uri $uri/ /index.php?$query_string; }
應該改為:
location / { if (!-e $request_filename){ rewrite ^/(.*)$ /index.php?s=/$1 last; } }
好了,一篇關於thinkphp5的rewrite寫到這,歡迎多多交流
總結: lnmp環境 thinkphp架構不改變目錄結構的情況下配置rewrite規則 Linux許可權,安全問題
參考資料:
http://www.kancloud.cn/manual/thinkphp5/207415
http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html
轉載請註明:愛遊思 » thinkphp5部署於Linux中nginx多網站解決方案