【问题标题】:Laravel all routes except '/' return 404Laravel 除了 '/' 之外的所有路由都返回 404
【发布时间】:2014-07-31 14:20:54
【问题描述】:

正如标题所说,我的 laravel 应用中除了 home('/') 路由之外的所有路由都会导致 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';
});

bootstrap/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,但它没有提供答案。

我该如何解决这个问题?

【问题讨论】:

  • 您的 Apache 配置是否允许 .htaccess 覆盖,就像我上一个回答中一样:index.php still needed, even after .htaccess
  • 是的。我之前也在我的共享主机上托管了一个 Laravel 应用程序,没有类似的问题。
  • 在您的 bootstrap/paths.php 中尝试将 public 更改为 'public' =&gt; __DIR__.'/../public'
  • 那行不通,米奇。
  • 你确定在服务器上启用了 mod_rewrite 吗?只是试图排除明显的......

标签: php .htaccess laravel laravel-4


【解决方案1】:

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

【讨论】:

【解决方案2】:

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

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

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

        Order allow,deny
        Allow from all
</Directory>

另一个原因可能是启用 apache rewrite mod。您可以使用以下命令来完成。

sudo a2enmod rewrite
sudo service apache2 restart

【讨论】:

    【解决方案3】:

    index.php

    .htt访问

    在同一目录中。

    对我有用

    【讨论】:

      【解决方案4】:

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

      • Right : AllowOverride 应该设置为 All。

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

        LoadModule rewrite_module modules/mod_rewrite.so

      【讨论】:

        猜你喜欢
        • 2020-08-26
        • 2018-08-20
        • 2019-10-28
        • 2020-10-03
        • 2017-11-15
        • 2016-06-07
        • 1970-01-01
        • 1970-01-01
        • 2018-04-06
        相关资源
        最近更新 更多