Mod rewrite 自定义查询参数,而不将其附加到URL

Mod rewrite 自定义查询参数,而不将其附加到URL,mod-rewrite,url-rewriting,yii,url-routing,Mod Rewrite,Url Rewriting,Yii,Url Routing,我在urlManager中有'urlFormat'=>'path'和'showScriptName'=>false 我将代理/读取作为控制器/操作,并将article=>一些名称作为参数 每当我创建链接时,例如: $this->createUrl('proxies/read',array('article'=>$name)) 结果是以下类型的URL: proxies/read?article=socks5_proxy_list 我想转储查询参数并重新格式化URL,如下所示: controlle

我在
urlManager
中有
'urlFormat'=>'path'
'showScriptName'=>false

我将代理/读取作为控制器/操作,并将article=>一些名称作为参数

每当我创建链接时,例如: $this->createUrl('proxies/read',array('article'=>$name))

结果是以下类型的URL:

proxies/read?article=socks5_proxy_list
我想转储查询参数并重新格式化URL,如下所示:

controller/action/param_name/param_value
'rules'=>array(
  '<controller:\w+>/<id:\d+>'=>'<controller>/view',
  '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
  '<controller:\w+>/<action:\w+>/article/<article:\w+>'=>'<controller>/<action>/article/<article>',
  '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
在这种情况下,这将是:

proxies/read/article/socks5_proxy_list
我当前的“规则”如下所示:

controller/action/param_name/param_value
'rules'=>array(
  '<controller:\w+>/<id:\d+>'=>'<controller>/view',
  '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
  '<controller:\w+>/<action:\w+>/article/<article:\w+>'=>'<controller>/<action>/article/<article>',
  '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
“规则”=>数组(
“/”=>“/视图”,
'//'=>'/',
'//article/'=>'//article/',
'/'=>'/',
),
但它们似乎不起作用。

不需要规则

至于createUrl()。将参数的key=>value数组作为第二个参数交给它

试试这些规则

'rules'=>array(
  '<controller:\w+>/<id:\d+>'=>'<controller>/view',
  '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',  
  '<controller:\w+>/<action:\w+>/*'=>'<controller>/<action>',
),
“规则”=>数组(
“/”=>“/视图”,
'//'=>'/',  
'//*'=>'/',
),
  • 实现此功能的快捷方式:

    $this->createUrl('proxies/read/article/'.$name);
    
    并将urlManager规则保留为不包含自定义规则

  • 另一种方式:

    // urlManager
    'rules'=>array(// order of rules is also important
      '<controller:\w+>/<action:\w+>/article/<article:\w+>'=>'<controller>/<action>',
      '<controller:\w+>/<id:\d+>'=>'<controller>/view',
      '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
      '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
    ),
    
  • 如果您不需要任何默认的“”规则,而只需要路径格式的URL,那么您只需要指定
    'urlFormat'=>'path'
    ,并将
    'rules'
    数组保留为空或一起省略


  • 如果您还没有阅读最终指南中的,请阅读。

    尝试所有3种方法,并选择最适合您的方法