php - laravel部署到linux,將public資料夾指定為網站根目錄,但是無法存取其子資料夾
PHP中文网
PHP中文网 2017-06-05 11:08:16
0
8
1999

本機使用的是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中文网

认证高级PHP讲师

全部回覆(8)
PHPzhong

謝謝你得邀請。

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

1.大小寫敏感。

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

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

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

Ty80

謝邀!

像這樣只能一個個排除

  1. 排除檔案快取問題

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

黄舟

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

洪涛

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 "";
    }
迷茫

500 錯誤很簡單 ~

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

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

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

$ cd {项目目录}/storage/logs
巴扎黑

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

世界只因有你

最好貼下框架回傳的錯誤

伊谢尔伦

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!