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

Ami*_*ole 59 routing http-status-code-404 laravel laravel-4 laravel-routing

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

<?php

Route::get('/', function()
{
    return View::make('hello');
});
Run Code Online (Sandbox Code Playgroud)

这不是:

Route::get('/hello', function()
{
    return View::make('hello');
});
Run Code Online (Sandbox Code Playgroud)

我试图打是TasksController/tasks:

Route::resource('tasks', 'TasksController');
Run Code Online (Sandbox Code Playgroud)

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

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

我在Mac上使用localhost.

Gar*_*ryJ 103

只是为了笑,看看是否/index.php/hello有效.

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

  • 废话!/index.php/hello 工作但 /index.php/tasks 现在给我一个 500 错误。跆拳道?我会用 htaccess 内容更新我的问题 (2认同)
  • 检查.htaccess中是否有*任何*正在运行 - 如果您正在运行Apache 2.4,请注意自以前版本以来的更改,关于`<Directory /> ...中的`Require all granted`和`AllowOverride all``</Directory >`阻止您的虚拟主机.并重启Apache以获得好运. (2认同)

小智 39

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

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

    #LoadModule rewrite_module modules/mod_rewrite.so
    
    Run Code Online (Sandbox Code Playgroud)
  2. 取消注释此行(删除#)
  3. 保存 httpd.conf
  4. 重启WAMP

它应该工作!

  • 在Ubuntu上,这将是:`sudo a2enmod rewrite`后跟`sudo service apache2 restart` (13认同)

小智 27

我有同样的问题,解决方案是在Apache2上启用重写mod

在终端中使用以下命令:

$ sudo a2enmod rewrite
$ sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)

而魔术!


Orh*_*han 15

有完全相同的问题.

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

  1. 在Apache中启用rewrite_module
  2. AllowOverride从None 更改为All,例如(Apache 2.4.9):

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

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


小智 10

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

添加

RewriteBase /your_apache_alias
Run Code Online (Sandbox Code Playgroud)

到.htaccess就可以了.


Bas*_*MHL 8

对于UBUNTU用户 -已针对Ubuntu 18.04测试

1-启用mod重写

sudo a2enmod rewrite
Run Code Online (Sandbox Code Playgroud)

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

sudo nano /etc/apache2/apache2.conf
Run Code Online (Sandbox Code Playgroud)

在此块中将AllowOverride从None更改为All

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)

3-重启Apache

sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)


dav*_*zie 6

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

Route::get('hello', function()
{
    return View::make('hello');
});
Run Code Online (Sandbox Code Playgroud)

应该管用.

  • 试过了.也不起作用 - 所有道路都通向404 (8认同)

Her*_*him 5

就像@GaryJ 和@MartinGomez 所说的那样。这是.htaccess的内容,应该在 Apache 服务器上运行的所有 Laravel 4 项目的公共文件夹中设置:

<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>
Run Code Online (Sandbox Code Playgroud)


Dyl*_*ler 5

我尝试了所有这些都没有成功,然后找到了另一个帖子,并将我的.htaccess更改为:

<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /index.php [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)