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 路由

Laravel:如何路由到公共文件

PHP Laravel 路由问题

Laravel index.php 路由问题

laravel 5 - 在 routes.php 末尾捕获所有路由(Route::controller)?

Nginx 总是将 Laravel 路由重定向到默认的根 index.php 页面