我已经在服务器中的 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>
所以,我一直在摆弄虚拟主机,但我发现的最佳解决方案根本不涉及它们,这就是。
首先要做的是为应用程序的根文件夹及其公共文件夹配置 .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 。
虽然 @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'));
});
});
}
这样,您将保持路线文件尽可能干净,而且您将永远这样做。