前言
我們大家在配置本地 PHP 開發環境時,除非是在 Windows 下,否則我都是偏向于 Nginx + PHP-FPM, 即使 Mac 下已經有了自帶的 Apache+PHP 環境,依然如此。一方面是因為 Mac 自帶的 PHP 版本不夠新(5.6.x),另一方面,Nginx + PHP-FPM 更接近于我的生產服務器環境,而且也方便用 Homebrew 來管理版本和擴展。
在 Mac 下開發 Laravel, 官方提供了 valet, 可以方便地把子目錄映射為虛擬主機,但我在使用的時候,遇到一些問題:
- 真實錯誤信息難以追蹤,總是報 valet 的 index.php 或者 laravel 的 index.php 錯誤;
- Symfony 框架里的 config.php/app_debug.php 等無法直接訪問。
于是我只保留了 dnsmasq 來管理特定后綴的域名(實現自動解析),然后放棄了 valet,自己做了一個泛解析綁定到本地子目錄的配置。
具體配置如下(域名是 *.app):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
server { listen 80; server_name ~^(?<subdomain>.+).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; } } |
采用這個配置以后:
- 如果存在 ~/Sites/domain/public, 則 domain.app 域名的根目錄會指向 ~/Sites/domain/public;
- 如果存在 ~/Sites/domain 但是不存在 ~/Sites/domain/public, 則 domain.app 域名的根目錄會指向 ~/Sites/domain;
- 網站根目錄下真實存在的 php 文件可以直接訪問,只有不存在的文件才會通過入口文件(index.php)處理;
- 如果需要支持其它框架,可以在配置文件中加一條 if 語句實現,比如要支持 symfony 的話,復制一下 if 判斷塊,把 public 改成 web 即可。
我雖然只是用于 mac/linux, 但實際上 Windows 下當然也是可以的,如果你在 Windows 下也使用 Nginx 的話。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。
原文鏈接:https://ofcss.com/2017/08/28/nginx-wildcard-to-subdir-auto-detect-laravel.html