Laravel 4除主页外的所有路由导致404错误

时间:2012-11-22 14:39:05

标签: laravel laravel-4 routing http-status-code-404 laravel-routing

我使用Composer安装了Laravel 4并设置了虚拟主机。目前,只有根路由正在运行:

<?php

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

这不是:

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

我想要点击的是TasksController /tasks

Route::resource('tasks', 'TasksController');

这也给了我404错误。我能做错什么?我在项目的根目录下有一个默认的.htaccess文件:

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

我在Mac上使用localhost。

18 个答案:

答案 0 :(得分:101)

只是笑一笑,看看/index.php/hello是否有效。

如果是这样,那么很可能是.htaccess问题。

答案 1 :(得分:38)

在WAMP(Windows 8)上运行Laravel 4时遇到同样的问题 对我有用的解决方案是:

  1. 打开apache httpd.conf并找到以下行:

    #LoadModule rewrite_module modules/mod_rewrite.so
    
  2. 取消注释此行(删除#
  3. 保存httpd.conf
  4. 重启WAMP
  5. 应该有效!

答案 2 :(得分:27)

我遇到了同样的问题,解决方法是在Apache2上启用重写mod

在终端中使用以下命令:

$ sudo a2enmod rewrite
$ sudo service apache2 restart

魔法!

答案 3 :(得分:13)

有完全相同的问题。

我需要做两件事来解决这个问题:

  1. 在Apache
  2. 中启用 rewrite_module
  3. AllowOverride 从无更改为全部,示例(Apache 2.4.9):

        选项索引FollowSymLinks MultiViews     AllowOverride All     要求全部授予

  4. 供参考: 使用Laravel Homestead和VirtualBox以及Vagrant而不是WAMP。它包含Nginx而不是Apache,但默认情况下一切正常,因为它是为Laravel明确配置的。

答案 4 :(得分:9)

即使在启用mod_rewrite后,如果您对laravel / public文件夹设置别名,也可能会遇到此问题。

添加

RewriteBase /your_apache_alias

到.htaccess就可以了。

答案 5 :(得分:6)

面向UBUNTU用户的-已针对Ubuntu 18.04进行了测试

1-启用mod重写

sudo a2enmod rewrite

2-更改apache conf文件中的AllowOverride:

sudo nano /etc/apache2/apache2.conf

在此块中将AllowOverride从“无”更改为“全部”

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

3-重新启动Apache

sudo service apache2 restart

答案 6 :(得分:6)

在定义除家之外的任何内容时,您不需要/:

Route::get('hello', function()
{
    return View::make('hello');
});

应该工作。

答案 7 :(得分:4)

由于Laravel 4是从静态文件中的地图自动加载文件,因此您需要在添加新控制器时更新该文件。运行此命令以重建静态文件:

php composer.phar dump-autoload

答案 8 :(得分:3)

之前的回答有一点缺陷。 这可能会有所帮助。

$ sudo a2enmod rewrite
$ sudo service apache2 restart

希望如此。

答案 9 :(得分:3)

我遇到了这个问题(在Windows上手动安装了Apache 2.2),原因是我的VirtualHost中缺少AllowOverride,因为httpd.conf中的根目录默认为None。

FileInfo Options=MultiViews是Laravel的.htaccess

所需的最小集合

e.g。

<VirtualHost *:80>
    DocumentRoot "C:/htdocs/domain.com/laravel/public"
    ServerName foo.domain.com

    <Directory "C:/htdocs/domain.com/laravel/public">
        AllowOverride FileInfo Options=MultiViews
    </Directory>
</VirtualHost>

如果这不起作用且您不关心安全性,请使用AllowOverride All

答案 10 :(得分:3)

很明显,问题出现是因为&#34; mod_rewrite&#34;,在某些情况下,只是在Apache中启用此模块就足以让它得到修复。

但是,在我的情况下,我必须以下列方式扩展VirtualHost的配置:

<VirtualHost *:80>

    ServerName adplus.local

    ServerAdmin sergey.donchenko@gmail.com
    DocumentRoot /var/www/adplus.local/project/public

    **<Directory "/var/www/adplus.local/project/public">
        AllowOverride All
    </Directory>**

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

答案 11 :(得分:3)

我尝试了所有这些没有成功然后我发现另一篇文章并将我的.htaccess更改为:

<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /index.php [L]
</IfModule>

答案 12 :(得分:2)

就像@GaryJ&amp; @MartinGomez说。这是 .htaccess 的内容,应该在Apache服务器上运行的所有laravel 4项目的 public 文件夹中设置:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On
    RewriteBase /

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

答案 13 :(得分:2)

转到

  

nano / etc / nginx / sites-available / yoursite

找到try_file并替换如下:

try_files $uri $uri/ /index.php?$query_string;

答案 14 :(得分:1)

对于Nginx用户,您可能复制了default虚拟主机 - 但是Laravel需要对location指令进行一些自定义,以允许Laravel应用程序执行路由而不是Nginx。

/etc/nginx/sites-available/your-site-name中将位置指令替换为:

location / {
    try_files $uri $uri/ /index.php$is_args$args;
}

然后运行sudo service nginx reload以使更改生效。

答案 15 :(得分:1)

我在Lubu 5.4的Ubuntu 14.04上遇到了类似的问题。

解决方案对我来说是两部分。首先在我的vhost文件/etc/apache2/sites-enabled/my_vhost.conf中,在声明<Directory>之后,我必须添加以下DocumentRoot条目以允许覆盖:

    DocumentRoot /var/www/path/to/my/app/public

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

            Order allow,deny
            Allow from all
    </Directory>

接下来,我必须启用重写:

sudo a2enmod rewrite
sudo service apache2 restart

答案 16 :(得分:0)

此更新对我有用。在.htaccess文件中,只需在打开Rewriterules后添加以下内容。

Options -Indexes
Options +FollowSymLinks

像魅力一样工作

答案 17 :(得分:0)

此评论可能有点晚,但可能有所帮助。路由到这样的另一个视图时遇到了同样的问题:

rake db:migrate

但是没有工作所以我尝试了所有相关帖子中找到的所有内容,但还不足以解决我的问题,所以我在httpd.conf上找到了这一行:

Route::get('index', function () {
return view('index');
});

Route::get('login', function () {
return view('login');
});

所以我改变了#34;否认&#34;授予&#34;授予&#34;并在我的.htaccess上评论了这一行:

<Files ".ht*">
Require all denied
</Files>

并且工作!!我认为这一行使得Apache不会考虑项目的.htaccess文件,所以将其转为授权就可以了。 希望这可以帮助有同样问题的人。

使用Apache Server 2 @ Manjaro Linux(基于Archlinux)