PHP Laravel 路由问题
Posted
技术标签:
【中文标题】PHP Laravel 路由问题【英文标题】:PHP Laravel Routing Issue 【发布时间】:2012-08-16 06:26:41 【问题描述】:我目前的设置如下所示
应用程序/控制器/register.php
class register_Controller extends Base_Controller
public $restful = true;
public function get_index()
return View::make('main.register');;
routes.php
Route::controller(Controller::detect());
Route::any('/', function()
return View::make('main.index');
);
Route::any('register',function()
return View::make('register.index');
);
mydomain.com 有效。
mydomain.com/index 给出 laravel 404
mydomain.com/register 给出标准 404
奇怪的是 mydomain.com/register 不应该给我一个 laravel 404 错误吗? This 页面表明 WAMP 是原因,但我的设置是在运行 PHP5、Apache2 和 mysql 的 Ubuntu VM 上。
【问题讨论】:
最后一条路线?除了踩到控制器的脚趾之外,它还有什么用……巧合的是,这需要根据我对 Laravel 的理解加以利用,Register_Controller
。我不明白为什么它没有抛出 laravel 404 提醒你。
我已经尝试过大写,在没有最后一条路线的情况下尝试过。我添加它是因为没有其他方法起作用,并且由于按照呈现的顺序评估路由,它不可能踩到控制器,对吧?我现在的感觉是 PHP 设置有问题。
Capitalised 是正确的,至少就我读过的所有 Laravel 文档而言。我可以告诉你,最后一条路线是完全没有必要的。如果控制器没有被自动检测到,请声明它:Route::Controller(array('register'));
也是register.php
在controllers目录而不是它的子目录?
register.php 不在子目录中。数组和单路由方法我都试过了,都无济于事。
【参考方案1】:
打开 mod_rewrite 后,尝试在 apache 配置中设置“AllowOverride All”,它为我修复了它。
【讨论】:
【参考方案2】:按照 Akash 的建议,确保您的 mod_rewrite 已启用。 在 Ubuntu 上使用以下命令在 Apache 上启用 mod_rewrite:
sudo a2enmod rewrite
(您不必编辑 httpd.conf) 不要忘记重新启动 apache。
你可以使用PHP命令
phpinfo();
检查 mod_rewrite 是否正常工作。
【讨论】:
phpinfo() 确认 mod_rewrite 已加载,但仍无法正常工作。将它作为虚拟主机放在 Ubuntu 上会是一个原因吗? 它适用于我的 Mint Linux(它是 Ubuntu 的衍生产品)。我无法想象为什么在虚拟主机上可能是原因。 我明白了! AllowOverride All 修复它【参考方案3】:确保在 Apache (httpd.conf) 中打开 mod_rewrite
取消注释以下行
LoadModule rewrite_module modules/mod_rewrite.so
然后重启httpd
【讨论】:
【参考方案4】:此外,您应该在检测到控制器之前设置路由。
Route::any('/', function()
return View::make('main.index');
);
Route::any('register',function()
return View::make('register.index');
);
Route::controller(Controller::detect());
【讨论】:
以上是关于PHP Laravel 路由问题的主要内容,如果未能解决你的问题,请参考以下文章
如何在 laravel 上使用 page.php?id=id 路由