在main.php yii中的URL设置中加密参数?

时间:2014-08-09 11:04:48

标签: php yii

这里的问题是网址中的加密代码,

我的网址是这样,加密代码就在最后:

http://localhost/php_pro_106/reload/ByCustomer/mJYwIzoaIGe0R8lAVCqPhG%2Fg0jJFWjiWWdPnkq5VDlY%3D

在main.php网址设置中:

'urlManager'=>array(
     'urlFormat'=>'path',
     'showScriptName' => false,
      'caseSensitive'=>false,
        'rules'=>array(
            'giftcard/<id:\w+>'=>'giftcard/index',
            'reload/ByCustomer/<giftcode:\w+>'=>'reload/ByCustomer',

             '<controller:\w+>/<id:\d+>'=>'<controller>/view',

           '<controller:\w+>/<action:\w+>/<id:\w+>'=>'<controller>/<action>',
            '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',

           ),
    ),

我的行动是重装控制器:

public function actionByCustomer()
  {

    echo "test";
    print_r($_GET);
    }

我得到了:

The requested URL     /localhost/reload/ByCustomer/mJYwIzoaIGe0R8lAVCqPhG/g0jJFWjiWWdPnkq5VDlY= was    
not found on this server.

实际上问题在于ByCustomer/mJYwIzoaIGe0R8lAVCqPhG%2Fg0jJFWjiWWdPnkq5VDlY%3D,因为它是加密的。我应该怎样做才能使它工作?

2 个答案:

答案 0 :(得分:2)

在你的byCustomer规则中,礼物代码正则表达式匹配单词。但是那个uri部分mJYwIzoaIGe0R8lAVCqPhG%2Fg0jJFWjiWWdPnkq5VDlY%3D不是一个单词,因为它包含像%这样的字符。它看起来像是一个url编码的字符串,%2f是/而%3d是=。然而,所有这些都不是一句话。

尝试此规则:

'reload/ByCustomer/<giftcode:.+>'=>'reload/ByCustomer',

匹配reload/ByCustomer/之后的任何符合您目的的字符。

答案 1 :(得分:0)

我得到了它的解决方案,为此我必须改变我的编码和解码方法:

问题是由于编码的Url中存在一些字符。所以,我必须替换这些字符。

在main.php中,Url Manager会像:

  'reload/ByCustomer/<giftcode>'=>'reload/ByCustomer',

apache在URL中有%2F的问题,它总是以404回复,不会执行php脚本。

编辑:

这是一个解决方案,但它要求您至少可以编辑虚拟主机的apache配置文件(当时我没有这样做)。然后,您必须在AllowEncodedSlashes On内添加<VirtualHost>。或者您也可以在全球范围内进行设置。

如果您不想这样做。

这些链接帮助我:

Stack over flow Solution1

Stack over flow solution2

google group