【问题标题】:NGINX: Rewrite url to change to hash/anchorNGINX:重写 url 以更改为 hash/anchor
【发布时间】:2014-12-11 21:35:52
【问题描述】:

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

URL 由域部分 (http://www.test.com/)、数据库引用部分 (?database=demo) 和连续变量 (&xxxx=xxxx) 构成。我希望 & 的第一个实例始终是 #

原始网址如下所示:

http://www.test.com/?database=demo&option=sign&type=new

我希望 NGINX 将 URL 重写为:

..website../?database=demo#option=sign&type=new

注意从 &option 到 #option 的变化。

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

..website../?database=demo#model=process&activion=none&option=sign&type=new

也许我做错了。也许告诉 NGINX 将 URL 中的第一个 & 替换为和 # 如果它还不是 # 会更容易,因为这就是我想要的效果。即使在这里,我也不知道如何实现这一目标。

感谢您的帮助和指导。

【问题讨论】:

  • 你需要了解nginx可以重定向到带有hash的URI,但是nginx在传入的请求中看不到hash部分(因为hash - 它是用于浏览器的)。因此,如果您输入 /?database=demo#model=process&activion=none&option=sign&type=new - nginx 只会看到 /?database=demo。
  • 我知道处理是在完全不同的位置完成的。 # 是客户端,而 & 确实被传递到服务器。经过一番尝试,我正在解决的问题有一个完全不同的解决方案。我使用 & 和 # 发送变量,以便它们在 Javascript 和 PHP 中得到处理。所以test.com/…,这对我有用。
  • 奇怪的解决方案 :) JavaScript 也可以处理 /?database=demo&option=sign&type=new 而没有任何哈希。

标签: url mod-rewrite nginx


【解决方案1】:

您可以检查查询字符串是否只有 database=demo。如果不是 - 使用哈希重定向。正如我所说,如果在浏览器中输入 /?database=demo#model=process - nginx 只会得到 /?database=demo

location / {
   if ($args ~ "^database=demo&(.+)$") {
       set $optherargs $1;
       return 301 /?database=demo#$otherargs;
   }
}

但是这个解决方案对 args 顺序敏感,database=demo 需要是第一个参数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-13
    • 2013-02-25
    • 1970-01-01
    • 2018-12-10
    • 2015-07-03
    • 2012-08-04
    • 1970-01-01
    • 2012-02-29
    相关资源
    最近更新 更多