在 nginx 上找不到 Laravel 路由

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/31493634/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 11:58:02  来源:igfitidea点击:

Laravel routes not found on nginx

phplaravelnginxroutesdigital-ocean

提问by Italo Borges

when I try to access my test app, just the index route works: malte.italoborg.es

当我尝试访问我的测试应用程序时,只有索引路径有效: malte.italoborg.es

If I try to access another route, like: malte.italoborg.es/admin

如果我尝试访问另一条路线,例如: malte.italoborg.es/admin

I got 404 error.

我收到 404 错误。

My nginx app file:

我的 nginx 应用程序文件:

server {
    listen 80;
    server_name malte.italoborg.es;
    root /home/italo/www/malte.italoborg.es/public;

    charset utf-8;

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log off;
    error_log  /home/log/nginx/malte.italoborg.es-error.log error;
    error_page 404 /index.php;
    sendfile off;

    # Point index to the Laravel front controller.
    index index.php;

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

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

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

I tried this solution in an another link in StackOverflow, but doesn't worked for me.

我在 StackOverflow 的另一个链接中尝试了这个解决方案,但对我不起作用。

All Laravel routes “not found” on nginx

在 nginx 上“未找到”所有 Laravel 路由

I'm using nginx in Digital Ocean.

我在 Digital Ocean 中使用 nginx。

::UPDATE::

::更新::

My routes.php

我的路线.php

<?php

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/

Route::get('/',
    ['as' => 'site.welcome.index', 'uses' => 'Site\WelcomeController@index']
);

Route::group(['prefix' => 'admin'], function () {

    // Login
    Route::get('login',
        ['as' => 'admin.auth.login', 'uses' => 'Admin\Auth\AuthController@getLogin']
    );
    Route::post('login',
        ['as' => 'admin.auth.login', 'uses' => 'Admin\Auth\AuthController@postLogin']
    );
    Route::get('logout',
        ['as' => 'admin.auth.logout', 'uses' => 'Admin\Auth\AuthController@getLogout']
    );

    // Password
    Route::get('password/email',
        ['as' => 'admin.password.email', 'uses' => 'Admin\Auth\PasswordController@getEmail']
    );
    Route::post('password/email',
        ['as' => 'admin.password.email', 'uses' => 'Admin\Auth\PasswordController@postEmail']
    );

    // Password reset
    Route::get('password/reset/{token}',
        ['as' => 'admin.password.reset', 'uses' => 'Admin\Auth\PasswordController@getReset']
    );
    Route::post('password/reset',
        ['as' => 'admin.password.reset', 'uses' => 'Admin\Auth\PasswordController@postReset']
    );

    Route::group(['middleware' => 'auth'], function () {

        // Home
        Route::get('/', ['as' => 'admin.home.index', 'uses' => 'Admin\HomeController@index']);

        // My Account
        Route::get('profile',
            ['as' => 'admin.profile.edit', 'uses' => 'Admin\ProfileController@edit']
        );

        Route::put('profile',
            ['as' => 'admin.profile.update', 'uses' => 'Admin\ProfileController@update']
        );

        // Nail polish
        Route::resource('polishes', 'Admin\NailPolishController');

        // Brands
        Route::resource('brands', 'Admin\BrandController');

        // Types
        Route::resource('types', 'Admin\TypeController');
    });
});

回答by Joel Hinz

Please try changing this

请尝试改变这个

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

to this

对此

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

And also remove this line:

并删除此行:

try_files $uri /index.php =404;

回答by blsn

Fix for Laravel 5.1:
$ vi /etc/nginx/sites-available/default

修复 Laravel 5.1:
$ vi /etc/nginx/sites-available/default

Comment out:
# try_files $uri $uri/ =404;

注释掉:
# try_files $uri $uri/ =404;

Add:
try_files $uri $uri/ /index.php;

添加:
try_files $uri $uri/ /index.php;

回答by S.Hossein Asadollahi

For the lumen and laravel this solved my problem:

对于 lumen 和 laravel,这解决了我的问题:

I've change the document root on nginx to root of my project:

我已将 nginx 上的文档根目录更改为我的项目的根目录:

root /usr/you/laravelinstall/public;