laravel 4除家外的所有路由导致404错误
试试我用composer php安装的laravel 4。 已经build立了一个虚拟主机。 只有根路线正在工作:
Route::get('/', function() { return View::make('hello'); });
即使这是行不通的
Route::get('/hello', function() { return View::make('hello'); });
我试图打的是/tasks
的TasksController
:
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是:
-
打开Apache的httpd.conf并find这一行:
#LoadModule rewrite_module modules/mod_rewrite.so
- 取消注释此行(删除
#
) - 保存
httpd.conf
- 重新启动WAMP
它应该工作!
我遇到了同样的问题,解决方法是启用Apache2上的重写模块
在terminal中使用以下命令:
$ sudo a2enmod rewrite $ sudo service apache2 restart
和魔法!
有完全一样的问题。
我需要做两件事来解决这个问题:
- 在Apache中启用rewrite_module
-
将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