Php 解析url以获取Kohana 3中的控制器和操作

Php 解析url以获取Kohana 3中的控制器和操作,php,url,controller,kohana,action,Php,Url,Controller,Kohana,Action,我在检测Kohana 3中推荐人页面的控制器/操作名称时遇到问题 我要做的是检测推荐人页面是来自内部还是外部。如果是外部页面(例如来自谷歌),我会进行一些默认设置。如果是内部推荐人(即来自同一个域),我需要根据该推荐人页面的控制器和操作信息执行不同的操作 我首先检查$\u服务器[“HTTP\u referer”],但我坚持从该变量获取控制器和操作名称。因为我在bootstrap中自定义了路由,所以我希望得到相同的路由 我知道Kohana提供了获取当前请求的控制器和操作的方法 $this->

我在检测Kohana 3中推荐人页面的控制器/操作名称时遇到问题

我要做的是检测推荐人页面是来自内部还是外部。如果是外部页面(例如来自谷歌),我会进行一些默认设置。如果是内部推荐人(即来自同一个域),我需要根据该推荐人页面的控制器和操作信息执行不同的操作

我首先检查$\u服务器[“HTTP\u referer”],但我坚持从该变量获取控制器和操作名称。因为我在bootstrap中自定义了路由,所以我希望得到相同的路由

我知道Kohana提供了获取当前请求的控制器和操作的方法

$this->request->controller
$this->request->action
$this->request->param('paramname')
我们想知道是否有方法可以解析给定的URL字符串并返回控制器/操作/参数信息

有什么想法吗

更新:

在对Kohana源代码进行了数小时的研究后,我找到了一个分为两步的解决方案:

第一步。将URL转换为URI。如果它来自外部参照者,则URI应为空

function URL2URI($URL)
{
    if (empty($URL)) return NULL;
    $url_info = parse_url($URL);
    if (!isset($url_info['host']) || !isset($url_info['path'])) return NULL;
    return ($url_info['host'] === $_SERVER['HTTP_HOST']) ? ltrim($url_info['path'], '/') : NULL;
}
第二步。使用所有路由测试URI,并从与URI匹配的路由获取信息($match['controller'],$match['action'])

你不应该使用:

$controller = Request::factory($your_url_without_http)->controller;
$action = Request::factory($your_url_without_http)->action;

为什么您需要控制器和操作才能知道推荐人是外部的还是内部的?@sberry2A:因为页面必须对不同的推荐人做出不同的响应。e、 g.如果访客来自外部,则回答A,如果访客来自内部页面X,则回答B,如果访客来自内部页面Y,则回答C,依此类推……最终找到了解决方案。请看上面编辑的版本。非常好的解决方案。它可以取代步骤2。注释(来自建议的编辑-不是我):“保留返回的对象更有效,因为创建请求对象可能会进行大量正则表达式匹配。”
$controller = Request::factory($your_url_without_http)->controller;
$action = Request::factory($your_url_without_http)->action;