Nginx删除特殊字符



我的网址是: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 ^(.*)?(.*)$ $1$2 last; 
}
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
rewrite ^(.*)?(.*)$ $1$2 last; 
include fastcgi.conf;
}

但不工作。如何去除";"?字符从URL?

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

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

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

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

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

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

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