3

我的问题源于我向用户发送电子邮件,内容如下:

http://mydomain.net/login/index/dest/%2Finvitation%2Fconfirm%2Fconfirmation_key%2F15116b5e4c61e4111ade679c10b3bf27

如您所见,我要做的是传递一个 url 作为参数“dest”,以便登录页面知道用户登录后重定向到哪里。但是,我看到以下内容:

404 未找到 - /login/index/dest//invitation/confirm/confirmation_key/15116b5e4c61e4111ade679c10b3bf27

这是我用来创建电子邮件的视图:

<p>
<?if($this->invitation->user):?>
<a href='<?=$this->serverUrl($this->baseUrl().$this->url(array(
    'action'=>'index',
    'controller'=>'login',
    'dest'=>$this->url(array(
        'action'=>'confirm',
        'controller'=>'invitation',
        'confirmation_key'=>$this->invitation->confirmation_key
    ))
)));?>'>Log in to confirm this invitation.</a>

//The view continues...

任何关于如何防止将 URI 编码项转换为其文字值的想法将不胜感激。

4

3 回答 3

6

你不能把它作为一个简单的 GET 参数发送过来吗?

http://mydomain.net/login/index/?redirect=/invitation/confirm/confirmation_key/15116b5e4c61e4111ade679c10b3bf27

这就是它实际上是如何完成的。

于 2011-07-14T00:23:24.967 回答
1
  1. ChrisR 写的绝对是答案
  2. 你为什么不直接使用$_SERVER['referer']
于 2011-07-14T00:29:08.533 回答
0

您还可以像这样升级您的链接:

<a href='<?=$this->serverUrl($this->baseUrl().$this->url(array(
'action'=>'index',
'controller'=>'login',
'dest'=>base64_encode($this->url(array(
    'action'=>'confirm',
    'controller'=>'invitation',
    'confirmation_key'=>$this->invitation->confirmation_key
))))

));?>'>Log in to confirm this invitation.</a>

但是在 上/login/index,您将需要使用base64_decode()来获取原始的不是最漂亮的解决方案,但是如果您无法使用简单的查询字符串,这是一种方法,如何通过 URL 安全地传递字符串。

http://en.wikipedia.org/wiki/Base64

于 2011-08-13T19:07:40.457 回答