由于 .htaccess 文件,Laravel 4 路由无法正常工作?
Posted
技术标签:
【中文标题】由于 .htaccess 文件,Laravel 4 路由无法正常工作?【英文标题】:Laravel 4 routing not working due to .htaccess file? 【发布时间】:2013-09-22 10:51:43 【问题描述】:我在这里写下我的步骤和发现,这样你就可以看到我尝试了什么以及我得到了什么结果。任何建议都会受到欢迎。我关注了this answer中的cmets。
我正在运行 Laravel 4,在 Windows 7 机器上使用 XAMMP version 1.8.2 with php 5.4.19 and 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
,请注意自上次以来的更改 版本,关于Require all granted
和AllowOverride all
在一个<Directory />...</Directory>
阻止您的虚拟主机。
我按照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
条件。因为您可以访问 主机/虚拟主机,如果不是,您可以很快启用该模块 - 所以它 不需要对每个请求进行检查。同样,尝试将其移出 的.htaccess
,并放入您的<Directory />...</Directory>
块中 vhost - 如果您的 .htaccess 中没有其他内容,则可以 也删了。
.htaccess
文件导致我的浏览器中404
出现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>
我做到了,就像阿米特一样,
我清空了我的
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://***.com/a/17778222/956975 和 http://www.epigroove.com/blog/laravel-routes-not-working-make-sure-htaccess-is-working
我应该在哪里更改? 我错过了什么?
【问题讨论】:
你的 routes.php 文件是什么样的?你有get route
到signup
吗?类似Route::get('signup', function() return 'Hello World'; );
是的,请看我的问题,你会发现我有 Route::get('signup', function() return 'hello!'; );
这很奇怪……嗯。你有更新版本的 l4 吗?
【参考方案1】:
您的服务器名称是
sos.dev
Apache 考虑到这一点,您必须使用以下方式访问您的路线:
http://sos.dev/
不是
http://localhost/
【讨论】:
我有同样的问题:Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException 错误无论我使用sos.dev 或localhost 还是按照建议添加虚拟主机时出现错误400错误请求。 能否向我们展示您在错误页面(服务器/请求数据)中的 REDIRECT_QUERY_STRING 和 REDIRECT_URL?以上是关于由于 .htaccess 文件,Laravel 4 路由无法正常工作?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.4 artisan 为 /public 的现有文件夹提供 htaccess / 和 Routes::get