Laravel路由重定向到Home而不是抛出NotFoundHttpException

时间:2015-02-20 10:27:35

标签: php apache laravel routes

我在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。

2 个答案:

答案 0 :(得分:1)

似乎nginx和apache服务器都存在这个问题。我采取了一些措施来缓解 apache

的问题

更改index.php文件名:

public/index.php to public/start.php

将.htaccess更改为:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ start.php [L]

将server.php文件中对index.php的引用更改为:

require_once $paths['public'].'/start.php';

答案 1 :(得分:0)

为什么你的路线不会这样使用?

// Home
Route::get('/', function() {
    return View::make('home');
}));

我认为问题来自你在路线数组中使用的 as