Nginx 去除特殊字符

Nginx remove special character

我的URL是:https://example.com/data=123456

我在 index.php 文件中添加了以下代码行:var_dump($_GET['data']); 但这只有在我添加一个 ?字符到 URL。 (例如:https://example.com/?data=123456) 这是 index.php.

的根

我试图将其添加到 nginx.conf 文件中:

location / {
    try_files $uri $uri/ /index.php$is_args$args;
    rewrite ^(.*)\?(.*)$  last; 
}

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    rewrite ^(.*)\?(.*)$  last; 
    include fastcgi.conf;
}

但是没有用。如何去掉“?”来自 URL?

的字符

当您的 URL 是 https://example.com/data=123456 时,data=123456 是 URL 路径 的一部分。当你的 URL 是 https://example.com/?data=123456 时,data=123456 是 URL 的 query 部分,其中查询参数 data如果 123456 有一个值。至少检查维基百科 article.

接下来,只能通过 $_GET 数组访问查询参数。完整的请求 URI(包括路径和查询部分)可通过 $_SERVER['REQUEST_URI'] 获得。您可以在 PHP 脚本中分析该变量并完全跳过重写部分。

如果您想重写您的 URI 并使 data 可以通过 $_GET['data'] 变量访问,这也是可能的。但是,您的主要错误是 rewrite 指令仅适用于给定 URL 的(规范化)路径,而不适用于其中的查询部分。尽管如此,它仍可用于附加(或替换)查询参数。为此,您可以使用

rewrite ^(.*/)(data=[^/]*)$ ?;

(仅重写 data 参数)或更通用的

rewrite ^(.*/)([^/=]+=[^/]*)$ ?;

(以 URL 路径后缀的每个 param=value 形式计算)。您可以将此重写规则放在 server 配置级别。