Nginx重定向(如果仅GET请求)

时间:2019-08-08 12:31:44

标签: php nginx http-redirect nginx-config

我在nginx中有一个重定向(如果没有,则添加结尾斜杠),我只想对GET请求运行以维护POSTed数据。检查if is evil文章似乎可以进行此设置吗?:

location / {
  if ($request_method = GET) {
    rewrite ^([^.]*[^/])$ $1/ permanent;
  }
  try_files $uri $uri/ /index.php?$query_string;
}

但是,在实际加载内容之前,此规则似乎使我在每次请求时都遇到404错误(因为我的404处理程序还通过了index.php,我猜是吗?)。这是一个Craft CMS网站。

这似乎与重定向部分无关,它可以正常工作(如果我没有斜杠,它可以重定向)是在出现斜杠时出现404,所以我认为这与{{ 1}}部分出问题了吗?但是,奇怪的是,如果我注释掉整个if语句(因此它只运行try_files),我 不要 会得到404。

如果有帮助的话,配置中的其余位置块等(都位于上面显示的try_files块之后)

location /

1 个答案:

答案 0 :(得分:1)

问题在于if上下文处理所有GET请求。

假设POST请求应由/index.php处理,则可以使用if块来处理所有POST请求。

例如:

location / {
    if ($request_method = POST) {
        rewrite ^ /index.php last;
    }
    rewrite ^([^.]*[^/])$ $1/ permanent;
    try_files $uri $uri/ /index.php?$query_string;
}