2

I'm trying to make this work. I want my routing to behave like this: when I type URL ie. example.com/api/getpage/http://smth.com I want to retrieve in my action id parameter with http://smth.com value. My routing for this case looks like this right now:

Route::set('api', 'api/<action>/<id>')
    ->defaults(array(
        'controller' => 'api',
        'action'     => 'index'
    ));

And what's in action:

public function action_getpage()
    {
        $obj = $this->scrape($this->request->query('id'));
        $this->response->body(json_encode($obj));
    }

Now URL like this example.com/api/getpage?id=http://smth.com works like a charm, but I don't want it that way. Is there any way to achieve that goal? Thanks in advance for all suggestions.

4

1 回答 1

2

问题是您不能在 url 段中使用斜杠(get 参数除外)。这与 kohana 路由无关,而是您的 Web 服务器如何处理它。解决它的唯一方法是用其他东西代替他的斜线。如果您作为最终段传递的 url 在其末尾有获取参数,您也会遇到问题,问号将导致它被视为主 url 的获取参数,而不是最终段。

另一种选择是对最终的 url 段进行 base64 编码,然后在控制器内对其进行解码。这将消除任何斜线和问号。PHP 有简单的 base64_encode 和 base64_decode 函数。唯一的缺点是 url 的一部分看起来像一个任意的乱码字符串。 http://php.net/manual/en/function.base64-encode.php

于 2013-01-26T15:43:42.747 回答