如果网址更改,则$ _SERVER ['QUERY_STRING']为空

时间:2018-11-04 13:48:45

标签: php

我有一个要解决的问题。第一个网址允许我在网站上显示信息或不显示信息。工作正常。 我以“帐户和编辑”为例,并采取措施。

http://localhost/boutique/index.php?Account&Edit
$_SERVER['QUERY_STRING'] = Account&Edit

如果我重写url,系统将无法运行,并且Account&Edit变为Account / Edit

http://localhost/boutique/index.php/Account/Edit
$_SERVER['QUERY_STRING'] = '';

此元素“帐户和编辑”更改时如何解决此元素? $_SERVER['QUERY_STRING']是空的。

谢谢。

我这样做是为了解决问题。

public function getUrlwithoutSEFU() {
  if (empty($_SERVER['QUERY_STRING'])) {
    $url = $_SERVER['REQUEST_URI'];
    $replace = str_replace('index.php', '', $url);
    $replace = str_replace(CLICSHOPPING::getConfig('http_path'), '', $replace);
    $replace = substr($replace, 1);
    $replace = str_replace('/', '&', $replace);
    $url_string = $replace;
  } else {
    $url_string = $_SERVER['QUERY_STRING'];
  }

  return $url_string;
}

2 个答案:

答案 0 :(得分:0)

看看RFC3875: The Common Gateway Interface (CGI) Version 1.1

  • 当请求URL中没有?时,就没有查询字符串。

  • REQUEST_URI很有道理。

这是将请求URL拆分为环境var的方式:

#                                   QUERY_STRING
#                                   ↓↓↓↓↓↓↓↓↓↓↓↓
http://localhost/boutique/index.php?Account&Edit

或(直接调用的)PHP脚本之后的部分。 (这可能取决于SAPI或受到重写规则的影响。)

#                                    PATH_INFO
#                                  ↓↓↓↓↓↓↓↓↓↓↓↓↓
http://localhost/boutique/index.php/Account/Edit

或完整路径:

#                        REQUEST_URI
#               ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
http://localhost/boutique/index.php/Account/Edit

值得注意的是,您那时必须自己将其拆分。例如,在某些设置的REDIRECT_REQUEST_URI数组中,也可能显示为$_SERVER

答案 1 :(得分:0)

解决方案

public function getUrlwithoutSEFU() {
  if (empty($_SERVER['QUERY_STRING'])) {
    $url = $_SERVER['REQUEST_URI'];
    $replace = str_replace('index.php', '', $url);
    $replace = str_replace(CLICSHOPPING::getConfig('http_path'), '', $replace);
    $replace = substr($replace, 1);
    $replace = str_replace('/', '&', $replace);
    $url_string = $replace;
  } else {
    $url_string = $_SERVER['QUERY_STRING'];
  }

  return $url_string;
}