NGINX возврат 301 вместо 404 - PullRequest
       5

NGINX возврат 301 вместо 404

0 голосов
/ 23 февраля 2020

Я использую NGINX на Centos 7. Я заблокировал все запросы PHP, потому что мой веб-сервер имеет только stati c html файлы. Моя NGINX конфигурация похожа на приведенную ниже;

server {
listen myIp:80;
server_name myDomain;

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

return 301 https://myDomain$request_uri;

}

, но она возвращает 301 для запросов на индекс. php. мой access.log, как показано ниже;

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. И когда я пытаюсь это сделать, введя «myDomain / mysql / admin / index. php» в веб-браузере, я получаю 403 после 301.

Может кто-нибудь объяснить, что происходит на моем NGINX сервере, и помочь мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 23 февраля 2020

Возврат 301 будет всегда выполняться, даже если местоположения совпадают, так как он не определен в указанном c местоположении. Попробуйте переписать Nginx конфиги, как показано ниже

location ~ \.php$ {
  return 403;
}

location / {
  return 301 https://myDomain$request_uri;
}
0 голосов
/ 23 февраля 2020

location ~(\.php$) { не совпадает, поскольку отсутствует пробел между ~ и самим регулярным выражением. Более того, нет необходимости создавать группу захвата. Таким образом, лучше:

location ~ \.php$ {
    return 403;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...