Laravel 4 路由不工作是由于 .htaccess 文件引起的?
Laravel 4 路由不工作是由于 .htaccess 文件引起的?
我在这里写下我的步骤和发现,这样你就可以看到我尝试了什么以及得到了什么结果。欢迎提供任何建议。我按照这个答案中的评论进行操作。\n我正在运行Laravel 4,使用XAMMP 1.8.2版本,带有PHP 5.4.19和Apache 2.4.4 在Windows 7机器上,我仍在尝试启动本地实例。\n在我的情况下:http://localhost/sos/sos_public/
是我的主屏幕,它可以正常工作,但是当我尝试访问http://localhost/sos/sos_public/signup
时,我遇到了这个错误:Symfony \\ Component \\ HttpKernel \\ Exception \\ NotFoundHttpException
这个错误在网上被广为讨论,然后我发现GaryJ说这可能是一个.htaccess
问题,所以我按照他的建议做了。\n我的/app/routes.php
文件如下(我也尝试过在signup
前面加上/
):\n
Route::get('signup', function() { return 'hello!'; }); Route::get('/', function() { return View::make('hello'); });
\n首先:\n
\n只是试一下,看看
/index.php/hello
是否可以工作。如果可以,那么就是一个.htaccess
问题。\n
\nhttp://localhost/sos/sos_public/index.php/signup
完全正常工作。所以这是一个.htaccess
问题。\n我的.htaccess
文件如下:\n
Options -MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L]
\n然后:\n
\n如果你正在运行
Apache 2.4
,请注意与之前版本的更改,关于Require all granted
和AllowOverride all
在虚拟主机的块中。\n
...
\n我按照Dalton Gore的建议在我的httpd.conf
文件中添加了以下内容(将此目录路径更改为/SOS/sos_public
和C:/xammp/htdocs/SOS/sos_public/
和C:/xammp/htdocs/SOS/sos_public
- 结果相同):\n
AllowOverride none Require all denied AllowOverride all Require all granted
\n接下来:\n
\n检查
.htaccess
中的任何内容是否有效\n
\n我在我的.htaccess
文件中添加了dsjkdsfghk
,立即得到了一个错误,所以我知道我的.htaccess
文件正在被使用。\n然后:\n
\n尝试删除
IfModule
条件。由于你可以访问主机/虚拟主机,如果模块未启用,你可以很快启用它,因此不需要在每个请求中进行检查。同样,尝试将其移出.htaccess
,并将其放入虚拟主机的块中 - 如果你的
... .htaccess
中没有其他内容,那么它可以被删除。\n
\n
- \n
- 一个空的
.htaccess
文件导致我的浏览器对http://localhost/sos/sos_public/signup
返回404
错误(http://localhost/sos/sos_public/
仍然可以工作)。 - 从
C:\\xampp\\htdocs\\SOS\\sos_public\\
中删除.htaccess
文件会产生相同的结果。
\n
\n
\n然后:\n
\n尝试:
DocumentRoot "/Users/amiterandole/Sites/laravelbackbone/public" ServerName laravelbackbone.dev AllowOverride all Require all granted Options -MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] \n
\n我这样做了,就像Amit一样,\n
\n我清空了
htaccess
文件并尝试了上述方法,但现在什么都不起作用了。\n
\n除了他的laravelbackbone.dev
指向他的Sites
文件夹根目录,当我在浏览器中运行http://localhost/sos/sos_public/
和http://localhost/sos/sos_public/signup
时,我只得到了一个Error 400 - Bad request
。\n我的httpd-vhosts.conf
文件如下:\n
\n我在我的.hosts文件中明显有:\n
127.0.0.1 sos.dev
\n最后:\n
\n你确定在主要的
httpd.conf
中包含(取消注释)conf/extra/httpd-vhosts.conf
文件吗?\n
\n我取消了注释 - 是的。\n我尝试了另一个链接,但没有成功:https://stackoverflow.com/a/17778222/956975 和 http://www.epigroove.com/blog/laravel-routes-not-working-make-sure-htaccess-is-working\n我应该在哪里进行修改?\n我错过了什么?
Laravel 4路由不工作的原因可能是由于.htaccess文件的问题。解决该问题的方法是启用apache2中的重写引擎。
在Linux系统中,可以通过以下命令启用重写引擎:
sudo a2enmod rewrite
sudo systemctl restart apache2
在Windows系统中,如果在Apache中找不到httpd.conf文件,可以查找apache2.conf文件,它是httpd.conf的另一个名称,并启用重写模块。有关更多信息,请参考以下链接中的步骤:
问题的原因是在Laravel 4中路由没有工作是由于.htaccess文件的问题。解决方法是确保在访问路由时使用正确的ServerName,而不是使用localhost。
在这个问题中,ServerName是sos.dev。因此,应该使用http://sos.dev/来访问路由,而不是使用http://localhost/。
在这个问题中,出现了Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException错误,无论是使用sos.dev还是localhost,或者在添加VirtualHost时出现了Error 400 Bad request错误。
为了解决这个问题,可以在错误页面(Server/Request Data)中查看REDIRECT_QUERY_STRING和REDIRECT_URL的值。