laravel 4除家外的所有路由导致404错误

试试我用composer php安装的laravel 4。 已经build立了一个虚拟主机。 只有根路线正在工作:

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

即使这是行不通的

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

我试图打的是/tasksTasksController

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

这也给我404。

我可能做错了什么? 安装时按照以下说明操作: http : //chris-schmitz.com/getting-started-with-laravel-4/

另外我在我的项目的根目录下有一个默认的.htaccess文件:

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

我在使用本地主机的Mac上。

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

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

在WAMP(Windows 8)上运行Laravel 4也有同样的问题。
为我工作的解决scheme是:

  1. 打开Apache的httpd.conf并find这一行:

     #LoadModule rewrite_module modules/mod_rewrite.so 
  2. 取消注释此行(删除#
  3. 保存httpd.conf
  4. 重新启动WAMP

它应该工作!

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

在terminal中使用以下命令:

 $ sudo a2enmod rewrite $ sudo service apache2 restart 

和魔法!

有完全一样的问题。

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

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

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

FYI:与VirtualBox和Vagrant一​​起使用Laravel Homestead而不是WAMP。 它包含了Nginx而不是Apache,但是默认情况下,它都可以正常工作,因为它明确地为Laravelconfiguration。

除了家庭之外,你不需要定义任何东西。

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

应该工作。

即使在启用mod_rewrite之后,如果您正在路由laravel /公用文件夹,则可能会遇到此问题。

添加

 RewriteBase /your_apache_alias 

到.htaccess的伎俩。

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

 php composer.phar dump-autoload 

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

FileInfo Options=MultiViews是Laravel的.htaccess所需的最小集合

例如

 <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如果这不起作用,你不关心安全性。

很显然,问题出现在“mod_rewrite”中,在某些情况下,仅仅在Apache中启用这个模块就足以让它修复。

但是,在我的情况下,我不得不以下列方式扩展VirtualHost的configuration:

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

我尝试了所有这些没有成功,然后我发现了另一个职位,并改变我的.htaccess为:

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

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

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

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

 $ sudo a2enmod rewrite $ sudo service apache2 restart 

希望它。

nano / etc / nginx / sites-available / yoursite

findtry_file并replace如下:

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

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

在你的/etc/nginx/sites-available/your-site-name中用下面的代码replace位置指令:

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

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

这个更新为我工作。 在.htaccess文件中,只需在重新打印文件打开后添加以下内容。

 Options -Indexes Options +FollowSymLinks 

像魅力一样工作

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

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

但没有工作,所以我尝试了所有相关post中发现的一切,但不足以解决我的问题,所以我发现在httpd.conf这行:

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

所以我改变了“拒绝”“授予”,并在我的.htaccess上评论这一行:

 #RewriteBase / 

和工作! 我认为这一行使Apache不考虑你的项目的.htaccess文件,所以把它变成理所当然。 希望这可以帮助有同样问题的人。

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

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

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

  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