Laravel所有路线除了' /'返回404

时间:2014-06-10 17:34:41

标签: php .htaccess laravel laravel-4

正如标题所示,除了主页(' /')之外,我的laravel app中的所有路线都会导致404错误。

我已将公用文件夹与其他laravel应用程序分开,如下面的文件夹结构所示。 编辑:我已经确认这不是造成问题的原因。

在开发系统(本地)和生产系统(共享主机)上都会发生此错误。

编辑:我忘了提及:如果我转到localhost / index.php / route_name

,路由可以正常工作

文件夹结构:(文件夹名称更改为public / laravel /为方便起见)

.
+-- public/
|    +-- index.php
|    +-- packages/
|    +-- etc...
+-- laravel/
|    +-- app/
|    +-- artisan
|    +-- etc...

routes.php文件:

<?php
Route::get('/', function() // Only this route works
{
    return 'hello world';
});

Route::get('oversikt', function() // This route does not work
{
    return 'goodbye world';
});

自举/ paths.php:

<?php
return array(
    'app' => __DIR__.'/../app',
    'public' => __DIR__.'/../../pc',
    'base' => __DIR__.'/..',
    'storage' => __DIR__.'/../app/storage',
);

的index.php:

<?php
require __DIR__.'/../pc_backend/bootstrap/autoload.php';
$app = require_once __DIR__.'/../pc_backend/bootstrap/start.php';
$app->run();

.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>

There exists an almost identical question here on stackoverflow,但它没有提供答案。

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:6)

在apache2.conf中将AllowOverride设置为all并使用命令a2enmod rewrite启用mod_rewrite后,一切正常。

答案 1 :(得分:1)

我知道这是一个老问题,但想在这里发布我的解决方案。它可能对其他人有帮助。

主要是apache虚拟主机的问题。在DocumentRoot之后,请确保vhost配置文件中有以下脚本。

<Directory "/var/www/path/to/my/app/public">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
</Directory>

另一个原因可能是启用apache重写mod。您可以使用以下命令来执行此操作。

sudo a2enmod rewrite
sudo service apache2 restart

答案 2 :(得分:0)

放入

  

index.php

  

.httaccess

在同一目录中。

这对我有用

答案 3 :(得分:0)

即使这是一个相当古老的问题,所提供的答案也不足以完全解决问题。

  • 右:AllowOverride 应设置为 All。

  • 而且,在同一个配置文件(对于某些 linux 用户,httpd.conf)中,取消注释该行(删除 #):

    LoadModule rewrite_module modules/mod_rewrite.so