Laravel 除了 '/' 之外的所有路由都返回 404
Posted
技术标签:
【中文标题】Laravel 除了 \'/\' 之外的所有路由都返回 404【英文标题】: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 ***,但它没有提供答案。
我该如何解决这个问题?
【问题讨论】:
您的 Apache 配置是否允许.htaccess
覆盖,就像我上一个回答中一样:index.php still needed, even after .htaccess
是的。我之前也在我的共享主机上托管了一个 Laravel 应用程序,没有类似的问题。
在您的 bootstrap/paths.php 中尝试将 public 更改为 'public' => __DIR__.'/../public'
那行不通,米奇。
你确定在服务器上启用了 mod_rewrite 吗?只是试图排除明显的......
【参考方案1】:
在 apache2.conf 中将 AllowOverride 设置为 all 并使用命令 a2enmod rewrite
启用 mod_rewrite 后,一切正常。
【讨论】:
这不是答案吗?还有@OP:如果有效,请将其标记为正确答案。 我觉得这个问题有很好的回复:Why do I always get a 404 error for any route I create【参考方案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
【讨论】:
以上是关于Laravel 除了 '/' 之外的所有路由都返回 404的主要内容,如果未能解决你的问题,请参考以下文章
laravel 5.1 表示除了 ('/') 之外的所有其他路由,使用 ec2 在在线亚马逊服务器上找不到 404 页面