這篇文章主要介紹如何實(shí)現(xiàn)Nginx泛解析到子目錄后自動(dòng)判斷有無public目錄,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
烏什ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!前言
我們大家在配置本地 PHP 開發(fā)環(huán)境時(shí),除非是在 Windows 下,否則我都是偏向于 Nginx + PHP-FPM, 即使 Mac 下已經(jīng)有了自帶的 Apache+PHP 環(huán)境,依然如此。一方面是因?yàn)?Mac 自帶的 PHP 版本不夠新(5.6.x),另一方面,Nginx + PHP-FPM 更接近于我的生產(chǎn)服務(wù)器環(huán)境,而且也方便用 Homebrew 來管理版本和擴(kuò)展。
在 Mac 下開發(fā) Laravel, 官方提供了 valet, 可以方便地把子目錄映射為虛擬主機(jī),但我在使用的時(shí)候,遇到一些問題:
真實(shí)錯(cuò)誤信息難以追蹤,總是報(bào) valet 的 index.php 或者 laravel 的 index.php 錯(cuò)誤;
Symfony 框架里的 config.php/app_debug.php 等無法直接訪問。
于是我只保留了 dnsmasq 來管理特定后綴的域名(實(shí)現(xiàn)自動(dòng)解析),然后放棄了 valet,自己做了一個(gè)泛解析綁定到本地子目錄的配置。
具體配置如下(域名是 *.app):
server { listen 80; server_name ~^(?.+).app$; set $root /Users/kairee/Sites/$subdomain; if ( -d "/Users/kairee/Sites/$subdomain/public") { set $root /Users/kairee/Sites/$subdomain/public; } root $root; charset utf-8; client_max_body_size 128M; index index.php; location / { try_files $uri $uri/ /index.php$is_args$args; } access_log off; location ~ \.php\?? { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/tmp/php.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ /\.ht { deny all; } }
采用這個(gè)配置以后:
如果存在 ~/Sites/domain/public, 則 domain.app 域名的根目錄會(huì)指向 ~/Sites/domain/public;
如果存在 ~/Sites/domain 但是不存在 ~/Sites/domain/public, 則 domain.app 域名的根目錄會(huì)指向 ~/Sites/domain;
網(wǎng)站根目錄下真實(shí)存在的 php 文件可以直接訪問,只有不存在的文件才會(huì)通過入口文件(index.php)處理;
如果需要支持其它框架,可以在配置文件中加一條 if 語句實(shí)現(xiàn),比如要支持 symfony 的話,復(fù)制一下 if 判斷塊,把 public 改成 web 即可。
以上是“如何實(shí)現(xiàn)Nginx泛解析到子目錄后自動(dòng)判斷有無public目錄”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!