Laravel 在 Nginx 中非指定 public 目錄的配置

ePa發表於2017-04-28

在本地搭建了test/laravel,Nginx的虛擬主機我指定到test/資料夾下,結果 test.app/laravel/public/ 出來了,可是 test.app/laravel/public/home 的時候發現 file not found. 因為test/目錄下有好多其他程式碼,不想每一個配置一個虛擬主機,剛開始搜尋了好些程式碼,怎麼配置就是不對,查詢日誌全是404:

2017/04/28 14:35:56 [error] 16935#0: *167 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 127.0.0.1, server: test.app, request: "GET /laravel/public/home HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "test.app"

或者 /laravel/public/home 目錄不存在等等,各種搞各種除錯就是那麼的蛋疼。。。。。
剛開始看到http://www.cnblogs.com/lidabo/p/4169396.html 文章(我們看不懂官方的英文文件),就急吼吼的找下面的配置內容,沒看上面的解說,最終還是蛋疼疼。。。。。
後來。。。。。實在憋得難受就從開頭看。。。。中間迷糊睡著了。。。。,娘希匹,為什麼非要在 ~ .php$ 前面過濾,原來是。。。。有點小白。。。。

普通location和正則location匹配順序 的問題 反正不是一般理解的優先順序處理。。。。。貼程式碼吧。。。。。

server {
  listen    80;
  server_name test.app;

  root  /Sites/test;
  index index.php index.html index.htm;

  location / {
      autoindex on;
      try_files $uri $uri/ /index.php?$args;
  }

  #proxy the php scripts to php-fpm
  location ~ \.php$ {
    #deny all;
    #return 406;

    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  PATH_TRANSLATED $document_root$fastcgi_path_info;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;

    fastcgi_intercept_errors on;

    include /usr/local/etc/nginx/fastcgi.conf;
  }

  location ~ /laravel/public/.+$ {
    try_files  $uri $uri/ /laravel/public/index.php?$args;
    #deny all;
    #return 405;
  }

  location ~ /\.ht {
    deny  all;
  }
}

相關文章