NGINX:重写url以更改为哈希/锚定
我很难告诉NGINX重写某些URL,这些URL中包含&option=xxxx URL由域部分()、数据库引用部分(?database=demo)和连续变量(&xxxx=xxxx)构成。我希望&的第一个实例永远是# 原始URL如下所示: 我希望NGINX将URL重写为: …网站../?数据库=演示#选项=签名和类型=新建 请注意从&option到#option的更改 使事情复杂化的是,下一个URL应该保持不变,因为它不是&的第一个实例,并且#已经被设置: …网站../?数据库=演示#模型=流程和活动=无&选项=签名和类型=新建 也许我走错了方向。也许告诉NGINX替换第一个会更容易&在指向和的URL中,如果它还不是一个,因为这就是我想要的效果。即使在这里,我也不知道如何实现这一点NGINX:重写url以更改为哈希/锚定,url,mod-rewrite,nginx,Url,Mod Rewrite,Nginx,我很难告诉NGINX重写某些URL,这些URL中包含&option=xxxx URL由域部分()、数据库引用部分(?database=demo)和连续变量(&xxxx=xxxx)构成。我希望&的第一个实例永远是# 原始URL如下所示: 我希望NGINX将URL重写为: …网站../?数据库=演示#选项=签名和类型=新建 请注意从&option到#option的更改 使事情复杂化的是,下一个URL应该保持不变,因为它不是&的第一个实例,并且#已经被设置: …网站../?数据库=演示#模型=流程和
感谢您的帮助和指导。您可以检查查询字符串是否只有database=demo。如果没有-使用哈希重定向。正如我所说的,如果在浏览器中键入/?database=demo#model=process,nginx将只获得/?database=demo
location / {
if ($args ~ "^database=demo&(.+)$") {
set $optherargs $1;
return 301 /?database=demo#$otherargs;
}
}
但是这个解决方案是参数顺序敏感的,database=demo需要是第一个参数,您需要了解nginx可以通过散列重定向到URI,但是nginx在传入请求中看不到散列部分(因为散列-它是用于浏览器的)。因此,如果输入/?database=demo#model=process&activion=none&option=sign&type=new-nginx将只看到/?database=demo。我知道处理是在完全不同的位置完成的是客户端,而&确实传递到服务器。经过一番尝试,我正在解决的问题有了一个完全不同的解决方案。我使用&和#发送变量,以便在Javascript和PHP中对它们进行处理。奇怪的解决方案:)JavaScript可以处理/?database=demo&option=sign&type=new而不需要任何散列。