【问题标题】:Get variable from rewrite url in nginx从 nginx 中的重写 url 获取变量
【发布时间】:2014-07-28 03:06:55
【问题描述】:

在我的 conf 文件中,我有这个规则:

rewrite ^/signup /register.php;
rewrite ^/signup/([0-9A-Z]+)$ /register.php?ref=$1;

访问 site.com/signup 时一切正常 现在在我的 php 文件中,我有

if(isset($_GET['ref'])) {
$ref = $mysqli->real_escape_string($_GET['ref']); 
}

当我尝试从这个 url site.com/signup/abc123 获取变量 ref 时,什么也没有显示! 重写规则中有什么东西吗?

【问题讨论】:

  • [0-9A-Z] 仅大写且匹配失败。更改规则rewrite ^/signup/([0-9A-Za-z]+)$ /register.php?ref=$1;
  • 不工作,不显示参考
  • 添加规则我的conf,我请求http://homedomain/signup/abc123得到回复Array ( [ref] => abc123 )
  • 我明白了,只有第一条规则有效。
  • 更改规则rewrite ^/signup[/]*([0-9A-Za-z]*)$ /register.php?ref=$1;并删除第一条规则rewrite ^/signup /register.php;

标签: php nginx rewrite


【解决方案1】:

例子:

 if ( $uri ~ "^/signup$" ) {
 rewrite (.*)  /register.php;
}
if ( $uri ~ "^/signup/([0-9A-Za-z]*)$" ) {
  rewrite ^/signup/([0-9A-Za-z]*)$ /register.php?ref=$1;
}

【讨论】:

  • 如此复杂,而不是仅仅改变指令的顺序。重写按出现顺序应用。如果重写不匹配,则跳过。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-05
  • 2017-01-02
  • 1970-01-01
  • 2011-09-28
相关资源
最近更新 更多