2016-04-29 34 views
0

我有一个简单routes.php文件,看起来像这样:Laravel 5条航线和mod_rewrite的

Route::group(['middleware' => 'cors', 'prefix' => 'api'], function() { 
    Route::post('users', 'Api\[email protected]'); 
    Route::get('users/{userId}/leagues/', 'Api\[email protected]'); 
}); 

一旦我把我的应用程序服务器,我不能得到任何执行的路线。我得到404例外。

我试图通过将123置于文件的顶部,在routes.php文件中发生明显错误。然后我点击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

当您向文档根目录(您的案例中的/)发出请求时,Apache将查找所谓的DirectoryIndex-这是进行此类请求时加载的默认文件。通常,此索引文件是index.php,index.html或由服务器配置或覆盖文件(.htaccess)设置的任何一个。

在你的情况下,请求/将默认提供index.php - 这是Laravel的引导程序,并执行引导应用程序所需的初始步骤。其中一部分包括获取路线并处理它们。

但是,当你请求/somethingmod_rewrite未启用(或没有被读取您的.htaccess文件,因为AllowOverride未设置为All),Apache将不会试图以服务DirectoryIndex,因为它知道一个特定的请求被制造。由于/something不存在于您的文档根目录中,因此Apache将引发404错误。

所以,你需要确保mod_rewrite启用(输入sudo a2enmod rewrite到你的终端,或您的托管服务提供商说吧),并确保您的虚拟主机或默认的站点配置已设置AllowOverride All的文档根目录。

你也不妨试试以下方法:

FallbackResource /index.php 

这个指令依赖于mod_dir,而不是mod_rewrite退却到index.php而不是抛出一个404这个模块通常是默认启用的。

+0

所以,如果我的理解正确,万一'mod_rewrite'未启用,apache将不会提供'index.php'和'bootstrap'路由。PHP'(当遇到不同的'/')?我需要阅读更多关于mod_rewrite,谢谢你的答案。 – Ned

+1

确实。请记住'routes.php'与'mod_rewrite'无关。这里的关键是'index.php',它只在请求'/'时才会被提供。 –