Nginx重写规则:在问号前添加尾部斜杠

时间:2016-11-11 16:01:44

标签: nginx url-rewriting

在Nginx中,如何在重写规则中的问号前添加尾部斜杠?

我成功地在URL的末尾添加了斜杠。 A如下:

http://test/xx --> http://test/xx/

但我无法在问号前添加尾部斜杠。如下:

http://test/xx?id=2 --> http://test/xx/?id=2

我尝试了以下内容:

server {

  listen 34044;

  # add trailing slash to url end
  rewrite ^([^.\?]*[^/])$ $1/ permanent;

  # add trailing slash before question mark
  rewrite "^(.*)([^/]{1})\?(.*)$" $1$2/?$3 permanent;

  location / {
    ...
  }
}

但它不会在问号之前添加斜杠。

我想,我在第二个正则表达式中有一个错误,但我看不到它。请帮忙

1 个答案:

答案 0 :(得分:2)

在@ richard-smith发表评论后,我明白我所需要的只是一个正则表达式,如下所示:

    final Root result = em.createQuery(query).getSingleResult(); //Since we are getting results using primary key and distinct, we then use getSingleResult
    final Collection rootCollection = result.getCollection();

它可以正常工作:向所有URL添加尾部斜杠,包括在'?'之前的尾部斜杠。标志。并且它不会破坏资源链接,例如https://my-site/styles.css