我正在尝试做这项工作。我希望我的路由行为如下:
当我键入URL即。 example.com/api/getpage/http://smth.com
我想在我的id
参数中检索http://smth.com
值。
我对此案例的路由现在看起来像这样:
Route::set('api', 'api/<action>/<id>')
->defaults(array(
'controller' => 'api',
'action' => 'index'
));
正在采取行动:
public function action_getpage()
{
$obj = $this->scrape($this->request->query('id'));
$this->response->body(json_encode($obj));
}
现在,像example.com/api/getpage?id=http://smth.com
这样的网址就像一个魅力,但我不希望这样。有没有办法实现这个目标?提前感谢所有建议。
答案 0 :(得分:2)
问题是你不能在url段中使用斜杠(get参数除外)。这与kohana路由无关,而是与您的Web服务器如何处理它。围绕它的唯一方法是用其他东西替换他的斜杠。如果您在最后一个段中传递的URL在其末尾获得参数时,您也会遇到问题,问号将导致它被视为主URL的get参数,而不是最终段。
另一种选择是base64编码最终的url段然后在你的控制器内解码它。这将消除任何斜线和问号。 Php具有简单的base64_encode和base64_decode函数。唯一的缺点是url的部分看起来像一个任意的乱码字符串。 http://php.net/manual/en/function.base64-encode.php