我在laravel(4.2)路线中遇到了一些意想不到的行为。
假设我的服务器位于https://example.com。如果我输入https://example.com/whatever/index.php,我希望laravel抛出一个NotFoundHttpException,因为没有定义到“what”的路由。相反,laravel向我显示了起始页面,表明我的“家”路线被捕获。
如果我只输入https://example.com/whatever一切都很好(即我按预期得到了NotFoundHttpException)。我的localhost上没有问题。这里https://localhost/laravel/whatever/index.php按预期抛出NotFoundHttpException。
我的routes.php文件:
// Home
Route::get('/', array( 'as' => 'home', function() {
return View::make('home');
}));
也许有人可以给我一个提示,从哪里开始搜索造成这种行为的原因:Apache配置,PHP配置,Laravel配置?
作为S. Safdar的答案的修改: 起初我也想到了.htaccess重定向问题。在laravel的公共文件夹(Web服务器根目录)中放置.htaccess,如下所示:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
如您所见,此处的重定向已正确处理。请求的“whatever / index.php”不是真正的文件,因此它被重定向为由laravels index.php处理。如果我删除重写条件(加上规则),我会得到一个常规的apache 404错误页面。在我的情况下,没有任何帮助,因为我希望laravel正确(!)处理所有错误页面。但由于某些原因,laravels home route匹配以/index.php结尾的每个url。
答案 0 :(得分:1)
似乎nginx和apache服务器都存在这个问题。我采取了一些措施来缓解 apache :
的问题public/index.php to public/start.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ start.php [L]
require_once $paths['public'].'/start.php';
答案 1 :(得分:0)
为什么你的路线不会这样使用?
// Home
Route::get('/', function() {
return View::make('home');
}));
我认为问题来自你在路线数组中使用的 as 。