首頁  >  問答  >  主體

php - laravel部署到linux,將public資料夾指定為網站根目錄,但是無法存取其子資料夾

本機使用的是window環境,一切正常,但是部署到linux系統上(配的是nginx),在訪問的時候,控制器和方法都能正常執行,頁面也可以輸出,但是輸出的頁面卻缺少css檔,一查是500錯誤,已經將請求重定向到public資料夾下,
我的目錄結構是:

public/web/css/css.css

域名是:

aaa.com 

直接存取aaa.com就會執行Publc/index.php(因為設定了nginx,將請求重定向到public資料夾下),也可以正常輸出頁面,但是頁面上請求的:

url:aaa.com/web/css/css.css

卻是500錯誤,百思不得其解,請大神指教.謝謝各位.


現在發現一部分問題是nginx設定問題,網路抄了個設定:

server {
        listen       80;
        server_name  xxx;

        access_log  xxx  main;

        root       xxx;
        #root       xxx;
        index      index.php index.html index.htm;

        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }

        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
            #fastcgi_split_path_info ^(.+\.php)(/.+)$;
        }

   }

雖然現在可以訪問首頁了,但是現在有了另外的問題,我的項目是帶有前後台的,前台可以訪問,但是後台無法訪問,我是這樣實現前後台的,使用路由分離,我在RouteProvider.php中的map方法配置了兩個路由檔案:

    public function map(Router $router) {
        //加载前台路由文件
        $router->group([
            'namespace' => 'App\Http\WebControllers',
//             'prefix' => 'Web',//引入前缀
            //'middleware' => 'some_common_middleware',
                ], function ($router) {
            require app_path('Http/routes/routes.php');
        });
        //加载后台路由文件
        $router->group([
            'namespace' => 'App\Http\AdminControllers',
            'middleware' => 'App\Http\Middleware\LoginMenuMiddleware',
            'prefix' => 'Am',//引入前缀
                ], function ($router) {
            require app_path('Http/routes/admin_routes.php');
        });
    }
    
    

現在我的無法登入後台,即xxx.com/Am/Index/index會發送500錯誤,並且前台的ajax也無法執行.


專案結構目錄:


#謝謝大家的幫助,很可惜最後只能給一位大神採納.情況是這樣的,我這裡做出說明以備後來的人發生跟我一樣的情況.
如果出現跟我一樣的情況,請先檢查伺服器bootstrap/cache目錄下是否有快取檔案,有則請清空,在嘗試.確實是由於快取的存在導致的.

PHP中文网PHP中文网2666 天前1954

全部回覆(8)我來回復

  • PHPz

    PHPz2017-06-05 11:10:16

    謝謝你得邀請。

    個人覺得linux上部署的錯誤幾點:

    1.大小寫敏感。

    2.laravel下的資料夾開發部分是用的軟連接。

    3.index.php 在public下,靜態資源應該和public對應。

    如果沒解決問題,請貼出你得專案結構目錄

    回覆
    0
  • PHP中文网

    PHP中文网2017-06-05 11:10:16

    謝邀!

    像這樣只能一個個排除

    1. 排除檔案快取問題

    2. 目錄權限問題,修改該目錄權限755

    回覆
    0
  • 黄舟

    黄舟2017-06-05 11:10:16

    500可是內部伺服器錯誤,表示你的程式碼出錯了,而不是404,Not found

    回覆
    0
  • PHP中文网

    PHP中文网2017-06-05 11:10:16

    php-fpm的配置中使用者和群組要設定

    vim /etc/php-fpm.d/www.conf

    修改用戶群組配置

    user = nginx
    group = nginx

    將使用者群組設定為nginx

    chown -R nginx:nginx /path/to/your/webroot

    laravel的以下目錄需要有寫權限

    chmod -R 0775 bootstrap
    chmod -R 0775 storage

    針對laravel的vhost配置如下:

        root /www/path/to/public/;
        location / {
            index index.php;
            if (!-e $request_filename) {
                rewrite ^/(.*)$ /index.php/ last;
                break;
            }
        }
    
        # 解析PHP
        location ~ .+\.php($|/) {
            set $script $uri;
            set $path_info "/";
            if ($uri ~ "^(.+\.php)(/.+)") {
                set $script    ;
                set $path_info    ;
            }
    
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php?IF_REWRITE=1;
            include fastcgi_params;
            fastcgi_param PATH_INFO $path_info;
            fastcgi_param SCRIPT_FILENAME $document_root/$script;
            fastcgi_param SCRIPT_NAME $script;
            fastcgi_param HTTP_PROXY "";
        }

    回覆
    0
  • 迷茫

    迷茫2017-06-05 11:10:16

    500 錯誤很簡單 ~

    500 錯誤的話, 必定會有提示

    瀏覽器裡面的網頁面板不一定能抓取到結果, 你可以 在新便籤直接打開 查看提示

    或 去查看一下這個目錄下面的檔案, 凡是發生錯誤都會產生一條日誌

    $ cd {项目目录}/storage/logs

    回覆
    0
  • 巴扎黑

    巴扎黑2017-06-05 11:10:16

    rewrite不行。 。要先判斷下檔案是否存在再去rewrite

    回覆
    0
  • 世界只因有你

    世界只因有你2017-06-05 11:10:16

    最好貼下框架回傳的錯誤

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-05 11:10:16

    謝謝大家的幫助,很可惜最後只能給一位大神採納.情況是這樣的,我這裡做出說明以備後來的人發生跟我一樣的情況.
    如果出現跟我一樣的情況,請先檢查伺服器bootstrap/cache目錄下是否有快取檔案,有則請清空,在嘗試.確實是由於快取的存在導致的.

    回覆
    0
  • 取消回覆