我在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 /
答案 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;
}