我使用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。
答案 0 :(得分:101)
只是笑一笑,看看/index.php/hello
是否有效。
如果是这样,那么很可能是.htaccess
问题。
答案 1 :(得分:38)
在WAMP(Windows 8)上运行Laravel 4时遇到同样的问题 对我有用的解决方案是:
打开apache httpd.conf并找到以下行:
#LoadModule rewrite_module modules/mod_rewrite.so
#
)httpd.conf
应该有效!
答案 2 :(得分:27)
我遇到了同样的问题,解决方法是在Apache2上启用重写mod
在终端中使用以下命令:
$ sudo a2enmod rewrite
$ sudo service apache2 restart
魔法!
答案 3 :(得分:13)
有完全相同的问题。
我需要做两件事来解决这个问题:
将 AllowOverride 从无更改为全部,示例(Apache 2.4.9):
选项索引FollowSymLinks MultiViews AllowOverride All 要求全部授予
供参考: 使用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)