Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NGINX:重写url以更改为哈希/锚定_Url_Mod Rewrite_Nginx - Fatal编程技术网

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应该保持不变,因为它不是&的第一个实例,并且#已经被设置: …网站../?数据库=演示#模型=流程和

我很难告诉NGINX重写某些URL,这些URL中包含&option=xxxx

URL由域部分()、数据库引用部分(?database=demo)和连续变量(&xxxx=xxxx)构成。我希望&的第一个实例永远是#

原始URL如下所示:

我希望NGINX将URL重写为:

…网站../?数据库=演示#选项=签名和类型=新建

请注意从&option到#option的更改

使事情复杂化的是,下一个URL应该保持不变,因为它不是&的第一个实例,并且#已经被设置:

…网站../?数据库=演示#模型=流程和活动=无&选项=签名和类型=新建

也许我走错了方向。也许告诉NGINX替换第一个会更容易&在指向和的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而不需要任何散列。