路由适用于localhost,但不适用于实时服务器

时间:2010-02-16 09:48:02

标签: php routes kohana kohana-3 bootstrapping

当我在MAMP上访问我的网站时,它很有用

  

本地主机/站点/约-US /

当我将其上传到我的远程服务器,然后像这样访问它

  

http://www.server.com/site/about-us/

所有请求都会返回到bootstrap.php中设置的“默认”。

这是我的路线设定。

Route::set('default', '(<page>)')
    ->defaults(array(
        'page' => 'home',
        'controller' => 'page',
        'action'     => 'index',
    ));

问题是,每当它上传到我的服务器时,任何像/ about-us /这样的请求总是默认为设置路由时指定的 home 。如果我将默认值更改为“关于我们”,则每个页面都会转到“关于我们”。

有谁知道可能导致这种情况的原因?感谢

更新

这是一个工作的黑客攻击,但肯定是丑陋的。我仍然更愿意知道它为什么不按预期工作。

// Hack because I can not get it to go to anything except 'default' below...

 $uri = $_SERVER['REQUEST_URI'];

 $uri = str_replace(url::base(), '', $uri);

 $page = trim($uri, '/');

 if ( ! $page) $page = 'home';


Route::set('default', '(<page>)')
    ->defaults(array(
        'page' => $page,
        'controller' => 'page',
        'action'     => 'index',
    ));

3 个答案:

答案 0 :(得分:3)

您的代码基本上是一个捕获所有路由(它匹配所有请求)。你应该这样限制它。

Route::set('static', '(<page>)', array('page' => 'about-us'))
->defaults(array(
    'controller' => 'page',
    'action'     => 'index',
));

第3个参数是一个正则表达式,用于定义路由应匹配的内容。

该路由会将正则表达式中匹配的所有内容路由到页面控制器及其索引操作。

然后,您可以在行动中使用$page = $this->request->param('page');

答案 1 :(得分:0)

你是不是因为$ action而错误$ page?

如果我试试这个,它就可以了。这是我的控制器动作方法:

public function action_index($page = NULL)

{
    var_dump($page);
}

如果我浏览

localhost/site/blup

我看到了一个不错的

string(4) "blup"
回声。我的默认路由设置与您的相同。

答案 2 :(得分:0)

听起来Kohana对URL的自动检测不适用于您的服务器设置......它失败了什么Web服务器?

您可以在引导程序中更改Request :: instance() - &gt; execute()...行以开始:

支持::实例($ _ SERVER [ 'REQUEST_URI']) - &GT;执行()...

这将确保它使用正确的URI ..

有人说......正如Pixel Developer所说,你的路线看起来......奇怪......给我;)

但是 - 因为它适用于MAMP - 路线可能不是问题。