【问题标题】:simple nginx if statement in CC中的简单nginx if语句
【发布时间】:2016-06-29 02:45:38
【问题描述】:

我的 /etc/nginx/sites-available/default 页面中有这行代码:

rewrite ^/(.*)/(.*) /search.php?name=$1&last=$2

它完成了我想要的:更简洁的链接网址

example.com/john/smith 已正确转发到 PHP GET。

但是,它也破坏了我所有的样式和图片链接。

所以我希望仅当第一个单词既不是 css 也不是图像时才进行重写。

但我只能找到 url 中 GET 参数的 if 语句,而不是 url 中的directoies,如下所示:

if ($args ~* "/?param1=val1&param2=val2&") {
      rewrite ^ http://www.example.com/newparam/$arg_param1/$arg_param2? last;
}

【问题讨论】:

  • 我认为更好的解决方案可能是仅在请求的文件名不存在时才应用重写。 Take a look at this question.
  • @AustinBrunkhorst 我愿意使用该解决方案,但它似乎适用于 apache,我的问题是语法正确。我会寻找这样的 nginx 解决方案

标签: c nginx


【解决方案1】:

遵循此评论中建议的 apache 解决方案后:

“我认为更好的解决方案可能是仅在请求的文件名不存在时才应用重写。看看这个问题。Redirect requests only if the file is not found?

我将该功能转换为 nginx 并得到:

location / {
    try_files $uri $uri/ =404;
    if (-f $request_filename) {
            break;
    }
    rewrite ^/(.*)/(.*) /search.php?name=$1&last=$2
}

仅当在给定目录路径中找不到文件时,才会重写 url

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 2022-01-26
    • 1970-01-01
    • 2015-12-25
    相关资源
    最近更新 更多