带GET参数的CakePHP路由

带GET参数的CakePHP路由,cakephp,get,routes,Cakephp,Get,Routes,我目前正在将一个网站从WordPress移植到CakePHP,我对WP版本中使用的一个路由有问题 我必须走http://example.com/?specific_key=value至http://example.com/controller/action但是在默认主页路由捕获url之前,我找不到一种方法来捕获带有参数的url 非常感谢您的任何建议或指点 谢谢 无法基于GET参数设置路由 编辑:至少使用内置的CakeRoute类。无法基于GET参数设置路由 编辑:至少使用内置的CakeRoute

我目前正在将一个网站从WordPress移植到CakePHP,我对WP版本中使用的一个路由有问题

我必须走
http://example.com/?specific_key=value
http://example.com/controller/action
但是在默认主页路由捕获url之前,我找不到一种方法来捕获带有参数的url

非常感谢您的任何建议或指点


谢谢

无法基于GET参数设置路由


编辑:至少使用内置的CakeRoute类。

无法基于GET参数设置路由


编辑:至少使用内置的CakeRoute类。

尝试将以下内容添加到路由文件的顶部。检查参数是否设置了该值,并将“/”连接到需要路由到的位置。这样,它将在页面控制器路由之前匹配您的路由

if (isset($_GET['specific_key']) && $_GET['specific_key'] === 'value') {
    Router::connect('/', array(whatever controller/action you need));
}

// the rest of your routes
您还可以在htaccess文件中为其创建重写规则:

RewriteCond %{QUERY_STRING} ^specific_key=value$ [NC]
RewriteRule / /controller/action? [R=301,L]
第三个选项:使用自定义管线类:

创建文件
APP/Lib/Route/QueryStringRoute.php
,并将上面链接的内容放入其中

然后在你的路线上做:

App::uses('QueryStringRoute', 'Route');
Router::connect('/', array('controller' => 'your_controller'), array(
    'routeClass' => 'QueryStringRoute', 
    'query' => array('specific_key' => 'value')
));
同样,它需要在你回家之前


编辑:添加了第三个选项。

尝试将以下内容添加到路由文件的顶部。检查参数是否设置了该值,并将“/”连接到需要路由到的位置。这样,它将在页面控制器路由之前匹配您的路由

if (isset($_GET['specific_key']) && $_GET['specific_key'] === 'value') {
    Router::connect('/', array(whatever controller/action you need));
}

// the rest of your routes
您还可以在htaccess文件中为其创建重写规则:

RewriteCond %{QUERY_STRING} ^specific_key=value$ [NC]
RewriteRule / /controller/action? [R=301,L]
第三个选项:使用自定义管线类:

创建文件
APP/Lib/Route/QueryStringRoute.php
,并将上面链接的内容放入其中

然后在你的路线上做:

App::uses('QueryStringRoute', 'Route');
Router::connect('/', array('controller' => 'your_controller'), array(
    'routeClass' => 'QueryStringRoute', 
    'query' => array('specific_key' => 'value')
));
同样,它需要在你回家之前


编辑:添加了第三个选项。

我明白了。。。因此,我的解决方法是从应用程序控制器调用action方法(因为我将“/”路由到
/App/index
),但我不能通过调用它来访问控制器,我如何访问它?这是一个好的选择吗?AppController本质上是一个抽象类。您不能直接引用它。试试下面@tigrang的建议。我明白了。。。因此,我的解决方法是从应用程序控制器调用action方法(因为我将“/”路由到
/App/index
),但我不能通过调用它来访问控制器,我如何访问它?这是一个好的选择吗?AppController本质上是一个抽象类。您不能直接引用它。试试下面@tigrang的建议。这个条件做得很好,非常感谢!我希望我有足够的声望投票支持你,如果有人看到这个,请给@tigrang一些投票!再次感谢!:D这项工作做得很好,非常感谢!我希望我有足够的声望投票支持你,如果有人看到这个,请给@tigrang一些投票!再次感谢!:D