在服务器子文件夹下部署laravel后出现404错误如何解决?

问题描述 投票:0回答:2

我已经在服务器中的 public_html 目录下的子文件夹中上传了一个 laravel 项目。 例如 www.xyz.com/subfolder。 机器人我收到错误 404 NOT Found。

我的htaccess代码

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^public
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
laravel apache .htaccess
2个回答
2
投票

所以,我一直在摆弄虚拟主机,但我发现的最佳解决方案根本不涉及它们,这就是。

首先要做的是为应用程序的根文件夹及其公共文件夹配置 .htaccess 文件。我在这个答案中找到了一个简单的工作 .htaccess 文件,我在这里报告:

<IfModule mod_rewrite.c>
    RewriteEngine On 
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

对于公用文件夹,默认的 .htaccess 工作正常。

最后一步是在routes.php 中正确配置路由。对我有用的解决方法非常粗糙,也许人们可以找到一些更精致的解决方案,但它仍然在这里。

// Get base (root) route
$base_route = basename(base_path());

Route::get($base_route, function () {
    return view('welcome');
});

Route::get($base_route.'/myRoute', function() {
    return view('myRoute');
});

所以基本上你需要在应用程序中的每条路由前面添加 $base_route 。


0
投票

虽然 @Asif khan 的答案完成了所需的工作,但仍然很难记住为要添加到应用程序中的每个新路由添加相同的前缀。另外,API 的文件路由怎么样?您要添加到应用程序中的其他路由文件?

作为替代方案,您可以在

RouteServiceProvider

中添加前缀
public function boot(): void
{
    RateLimiter::for('api', function (Request $request) {
        return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
    });

    $this->routes(function () {
        Route::prefix('YOUR GLOBAL PREFIX')->group(function () {
            Route::middleware('api')
                ->prefix('api')
                ->group(base_path('routes/api.php'));

            Route::middleware('api')
                ->prefix('api/v1')
                ->name('api.v1.')
                ->group(base_path('routes/api-v1.php'));

            Route::middleware('web')
                ->group(base_path('routes/web.php'));
        });
    });
}

这样,您将保持路线文件尽可能干净,而且您将永远这样做。

© www.soinside.com 2019 - 2024. All rights reserved.