我刚刚开始学习Laravel框架,我遇到了路由问题。
唯一有效的路线是开箱即用的Laravel附加的默认主路线。
我在Windows上使用WAMP,它使用PHP 5.4.3和Apache 2.2.22,我也启用了mod_rewrite,并从application.php配置文件中删除了'index.php'以留下空字符串。
我创建了一个名为用户的新控制器:
class User_Controller extends Base_Controller {
public $restful = true;
public function get_index()
{
return View::make('user.index');
}
}
我在application / views / user /中创建了一个名为 index.php 的视图文件,其中包含一些基本的HTML代码,在routes.php中我添加了以下内容:
Route::get('/', function () {
return View::make('home.index');
});
Route::get('user', function () {
return View::make('user.index');
});
第一条路线在我的网络浏览器中访问根(http://localhost/mysite/public
)时工作正常,但当我尝试使用http://localhost/mysite/public/user
转到第二条路线时,我收到404 Not Found错误。为什么会发生这种情况?
答案 0 :(得分:90)
在我的Ubuntu LAMP安装中,我通过以下2个更改解决了这个问题。
sudo a2enmod rewrite
。AllowOverride All
然后重启Apache服务器:service apache2 restart
答案 1 :(得分:63)
使用WAMP点击wamp icon - > apache-> apache modules->滚动并检查rewrite_module 重启一下 LoadModule rewrite_module
注意,启用“rewrite_module”
后,服务器应用程序会自动重启答案 2 :(得分:32)
您是否尝试过检查
http://localhost/mysite/public/index.php/user
正在工作?如果是这样,那么请确保所有路径的文件夹没有任何大写字母。我有同样的情况,并将信件转换为小写有帮助。
答案 3 :(得分:22)
您是否尝试过将其添加到路径文件Route::get('user', "user@index")
?
@
之前的文字,在这种情况下为user
,会将页面定向到用户控制器和@
之后的index
user
,将脚本指向public function get_index()
函数$restful
。
我发现您正在使用Route
,在这种情况下,您可以将Route::any('user', 'user@index')
设置为POST
。这将处理GET
和{{1}},而不是分别编写它们。
答案 4 :(得分:8)
使用EasyPHP我遇到了同样的问题。发现我必须在AllowOverride All
的{{1}}块中指定 <Directory>
。如果没有这个,Apache有时会忽略您的httpd.conf
。
.htaccess
答案 5 :(得分:6)
您可以尝试将root/public/.htaccess
移至root/.htaccess
,它应该可以正常工作
答案 6 :(得分:5)
<强>路线强>
使用它们来定义不受控制器管理的特定路由。
<强>控制器强>
当您想使用传统的MVC架构时使用它们
解决您的问题
您不会将控制器注册为路由,除非您需要特定的“命名”路由来执行控制器操作。
不要为控制器操作创建路径,只需注册控制器:
Route::controller('user');
现在您的控制器已注册,您可以导航至http://localhost/mysite/public/user
并运行get_index
。
您也可以一次注册所有控制器:
Route::controller(Controller::detect());
答案 7 :(得分:3)
不要忘记RewriteBase
中的“public/.htaccess
”:
例如:
Options +FollowSymLinks
RewriteEngine On
RewriteBase /your/folder/public
答案 8 :(得分:3)
好的,所以经过一天多一点关注这个问题之后......我站起来做了我昨天应该做的事情,然后调试了发生的事情!
Laravel在这里尝试做的是将文件index.php
插入路径前面的路径前面。例如,如果你指定了Route::get('/account/create', ...,
并在浏览器上执行你的应用程序localhost/laravel/authenticate/public/account/create
,那么laravel想要执行localhost/authenticate/public/index.php/account/create
,但要做到这一点...... Apache需要通过/wamp/www/laravel/laravel/authentication/public
查看请求(您的路径可能会有所不同,具体取决于您的laravel应用程序的实际安装位置,但是需要进行替换的结尾public
)必须具有&#39;重写规则&#39;应用
幸运的是,laravel在应用程序.htaccess
文件夹中的方便的public
文件中提供了正确的重写规则。问题是,&#39; .htaccess&#39;中的代码。文件无法使用开箱即用的WAMP配置方式。这个SEEMS的原因是muvera在这个线程的顶部提出的问题 - 在RewriteRule
内容工作之前,需要由Apache加载rewrite_module代码。哎这是有道理的。
DOESN&#39; T有意义的部分:简单stopping
和restarting
Apache服务不会接受WAMP使用RewriteRule做正确事情所需的更改 - 我知道,我试过很多次了!
做什么工作:进行muvera建议的更改(参见主题的顶部)以加载正确的模块。然后,重置整个Windows会话,从而完全将Apache转储出内存。重启(重新加载)WAMP和VOILA!修复工作,应用正确的RewriteRule,yada,yada;我从此过上幸福的生活。
所有这一切的好消息:我现在对.htaccess
,RewriteRule
和httpd.conf
文件了解得更多。从应用程序的public
.htaccess
文件移动逻辑并将其放入Apache中httpd.conf的Directory ...
部分,有一个很好的(性能)参数&#39;仓&#39;文件夹BTW(特别是如果您有权访问该文件夹)。
答案 9 :(得分:0)
尝试在php.ini中启用短php标签。 WAMP通常会关闭它们,laravel需要它们。
答案 10 :(得分:0)
Route::get('/', function()
{
return View::make('home.index');
});
Route::get('user', function()
{
return View::make('user.index');
});
更改为
Route::get('user', function()
{
return View::make('user.index');
});
Route::get('/', function()
{
return View::make('home.index');
});
您必须在路线的末尾使用'/'(主页/默认值)
答案 11 :(得分:0)
你必须使用Laravel 5命令
class User_Controller extends Controller {
public $restful = true;
public function get_index(){
return View('user.index');
}
}
和routes.php
Route::get('/', function()
{
return view('home.index');
});
Route::get('user', function()
{
return view('user.index');
});
对于视图和控制器的Laravel 5命令更改,请参阅
之前我遇到相同错误的文档答案 12 :(得分:0)
只需在您的终端中运行。
composer dump-autoload
答案 13 :(得分:0)
路由无法正常运行的主要问题是macos中有mod_rewrite.so模块,在apache配置的httpd.conf文件中没有启用linux,因此.htaccess可以工作。 我通过取消注释该行来解决这个问题:
从上面的httpdf.conf行中删除#。然后它会工作。享受!
答案 14 :(得分:0)
我认为你已经删除了laravel公共文件夹中的默认.htaccess文件。上传文件,它应该解决你的问题。
答案 15 :(得分:0)
具有自动加载依赖项的简单命令
composer dump-autoload
仍然会丢失一些重要文件,因此请转到此处查看整个过程
https://codingexpertise.blogspot.com/2018/11/laravel-new.html
答案 16 :(得分:0)
如果通过Homestead使用Vagrant,则可能是安装共享文件夹时出错。看起来Vagrant会从该文件夹中取出文件,并在启动时交换掉主机上实际存在的文件,因此,如果发生错误,则实际上是在尝试从首次安装时访问Laravel安装(这就是为什么您只会得到“ home”(这是在安装过程中生成的)的原因。
您可以通过将ssh放入vm并检查route / web.php文件来查看它是否实际上是您的文件,从而轻松地检查它。如果不是,请退出,然后vagrant halt
,vagrant up
退出,并在引导时查找错误。
答案 17 :(得分:0)
index.html
.htaccess
sudo service apache2 restart
最有可能是由于缓存问题
答案 18 :(得分:0)
只需在终端中运行即可。
php artisan route:clear