我把我的步骤和发现写在这里,这样你就可以看到我尝试了什么,得到了什么结果。任何建议都是受欢迎的。我跟随了this answer中的评论。
我在Windows 7机器上运行Laravel 4,使用XAMMP版本1.8.2,PHP 5.4.19和Apache 2.4.4,我只是在尝试启动和运行一个本地示例。
在我的例子中:http://localhost/sos/sos_public/
是我的主屏幕,这是工作的,但当我试图进入http://localhost/sos/sos_public/signup
时,我得到这个错误:Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException
在网上已经被谈论了很多,然后我发现GaryJ声明这可能是一个.htaccess
的问题,所以我照他的建议做了。
我的/app/routes.php
文件看起来像这样(我也试过在signup
前面加上/
):
Route::get('signup', function()
{
return 'hello!';
});
Route::get('/', function()
{
return View::make('hello');
});
名字:
只是为了开个玩笑,看看/index.php/hello
是否能正常工作。如果能,那就是.htaccess
的问题了。http://localhost/sos/sos_public/index.php/signup
运行得非常好。所以这是一个.htaccess
问题。
我的.htaccess
文件看起来像这样:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
还有:
如果您运行的是Apache 2.4
,请注意自以前版本以来的更改,其中涉及虚拟主机上<Directory />...</Directory>
块中的Require all granted
和AllowOverride all
。
我按照Dalton Gore的建议在我的httpd.conf file
中添加了这个-得到了Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException
错误(将这个目录路径改为/SOS/sos_public
、C:/xammp/htdocs/SOS/sos_public/
和C:/xammp/htdocs/SOS/sos_public
-相同的结果):
<Directory />
AllowOverride none
Require all denied
</Directory>
<Directory /SOS/sos_public>
AllowOverride all
Require all granted
</Directory>
下一页:
检查.htaccess
中的任何内容是否正常工作
我将dsjkdsfghk
添加到我的.htaccess
文件中,并立即得到一个错误,因此我知道我的.htaccess
文件正在被使用。
然后:
试着删除IfModule
条件。因为你已经有了host / vhost的访问权限,如果没有,你很快就可以启用这个模块--这样就不需要在每次请求时都检查它。同样,试着把它从.htaccess
中移到vhost的<Directory />...</Directory>
块中--如果你的.htaccess中没有其他内容,它也可以被删除。
- 有一个空的
.htaccess
文件导致http://localhost/sos/sos_public/signup
在我的浏览器中出现404
错误(http://localhost/sos/sos_public/
仍然工作)。 - 从
C:\xampp\htdocs\SOS\sos_public\
中删除.htaccess
文件会产生相同的结果。
然后:
请尝试:<VirtualHost *:80> DocumentRoot "/Users/amiterandole/Sites/laravelbackbone/public" ServerName laravelbackbone.dev <Directory /> AllowOverride all Require all granted </Directory> <IfModule mod_rewrite.c> Options -MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule> </VirtualHost>
我做到了,就像Amit一样
我清空了我的htaccess
文件,并尝试了上述方法,现在似乎没有任何工作。
除了他的laravelbackbone.dev
指向他的Sites
文件夹根目录之外,当我在浏览器中运行http://localhost/sos/sos_public/
和http://localhost/sos/sos_public/signup
时,我只得到了一个Error 400 - Bad request
。
我的httpd-vhosts.conf
文件看起来像这样:
<VirtualHost *:80>
DocumentRoot "C:/xammp/htdocs/SOS/sos_public"
ServerName sos.dev
<Directory />
AllowOverride all
Require all granted
</Directory>
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
</VirtualHost>
在我的.hosts文件中,我显然有:
127.0.0.1 sos.dev
最后:
你肯定已经把conf/extra/httpd-vhosts.conf
文件包含在主httpd.conf
中了(未注解)?
我有这个未加评论-是的。
另一个链接我尝试但无济于事:https://stackoverflow.com/a/17778222/956975和http://www.epigroove.com/blog/laravel-routes-not-working-make-sure-htaccess-is-working的数据类型
我应该在哪里改什么?我错过了什么?
2条答案
按热度按时间aemubtdh1#
您的服务器名称是
Apache考虑到这一点,您必须使用以下方式访问路由:
而非
vecaoik12#
这可能是未在apache2中启用重写引擎的错误
在linux中,
sudo a2enmod rewrite
sudo systemctl restart apache2
在Windows中,
你应该找到httpd.conf文件,如果它在你的apache中不可用,寻找apache2. conf文件是httpd.conf的另一个名称,并启用重写模块以获得更多信息,或在这里查看如何在此链接中执行上述过程Lost httpd.conf file located apache