我有一个简单的routes.php
文件,如下所示:
Route::group(['middleware' => 'cors', 'prefix' => 'api'], function () {
Route::post('users', 'Api\UsersController@save');
Route::get('users/{userId}/leagues/', 'Api\UsersController@saveFavoriteLeague');
});
一旦我将我的应用程序放到服务器上,我就无法访问任何已执行的路由。我得到了404例外。
我试图在routes.php
文件中发出明显的错误,将123
放在文件的顶部。然后我点击mydomain.com/users/1/leagues
,我期待错误页面,语法错误,但没有发生(仍然得到404)。
但是,在添加这样的内容时:
Route::get('/', function() {
return 'Hello';
});
并点击归位路线mydomain.com
,我首先看到了语法错误,然后在修复它之后Hello
。
我花了好几个小时,直到我发现远程服务器上没有启用mod_rewrite。
有人可以对此有所了解吗?
为什么我的请求没有达到routes.php
(甚至没有显示语法错误),而是返回了404页面。为什么mod_rewrite使它工作? /
怎样才能到达route.php
,但/users
例如{{1}}没'?吨
谢谢!
答案 0 :(得分:1)
当您向文档根目录(/
发出请求)时,Apache将查找所谓的DirectoryIndex
- 在发出此类请求时加载的默认文件。通常,此索引文件为index.php
,index.html
,或者由服务器配置或覆盖文件(.htaccess
)设置。\ / p>
在您的情况下,请求/
默认情况下将提供index.php
- 这是Laravel的引导程序,并执行启动应用程序所需的初始步骤。部分原因包括获取路线并进行处理。
但是,当您请求/something
且未启用mod_rewrite
时(或由于.htaccess
未设置为AllowOverride
而未读取您的All
文件),Apache不会尝试提供DirectoryIndex
,因为它知道正在进行特定请求。由于您的文档根目录中不存在/something
,因此Apache将抛出404。
因此,您需要确保已启用mod_rewrite
(在您的终端中输入sudo a2enmod rewrite
,或与您的托管服务提供商联系),并确保您的虚拟主机或默认网站配置已设置{ {1}}用于文档根目录。
您可能还希望尝试以下操作:
AllowOverride All
此指令依赖于FallbackResource /index.php
而非mod_dir
回退到mod_rewrite
而不是抛出404.默认情况下,此模块通常会启用。