NGINX返回301而不是404

NGINX返回301而不是404,nginx,configuration,centos,Nginx,Configuration,Centos,我在Centos 7上使用NGINX。 我阻止了所有PHP请求,因为我的web服务器只有静态html文件。 我的NGINX配置如下: server { listen myIp:80; server_name myDomain; location ~(\.php$) { return 403; } return 301 https://myDomain$request_uri; 43.226.148.141 - - [23/Feb/2020:04:36:54 +0900] "GET

我在Centos 7上使用NGINX。 我阻止了所有PHP请求,因为我的web服务器只有静态html文件。 我的NGINX配置如下:

server {
listen myIp:80;
server_name myDomain;

location ~(\.php$) {
    return 403;
}

return 301 https://myDomain$request_uri;
43.226.148.141 - - [23/Feb/2020:04:36:54 +0900] "GET /mysql/admin/index.php HTTP/1.1" 301 162 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36" "-"
}

但对于index.php的请求,它返回301。我的access.log如下

server {
listen myIp:80;
server_name myDomain;

location ~(\.php$) {
    return 403;
}

return 301 https://myDomain$request_uri;
43.226.148.141 - - [23/Feb/2020:04:36:54 +0900] "GET /mysql/admin/index.php HTTP/1.1" 301 162 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36" "-"
我预计NGINX将返回404,因为index.php不存在,或者返回403,因为我添加了限制,但在access.log中它返回了301。 当我在web浏览器上输入'myDomain/mysql/admin/index.php'进行尝试时,301之后得到403

有人能解释一下我的NGINX服务器上发生了什么并帮我解决这个问题吗?

位置(\.php$){不匹配,因为它在
~
和正则表达式本身之间缺少一个空格。此外,不需要创建捕获组。因此,更好的方法是:

location ~ \.php$ {
    return 403;
}

即使位置匹配,也将始终执行返回301,因为它的作用域不在特定位置。请尝试重写Nginx配置,如下所示

location ~ \.php$ {
  return 403;
}

location / {
  return 301 https://myDomain$request_uri;
}