У меня есть следующая конфигурация внутри nginx сервер {...}
блокировать:
расположение /какое-то приложение {
если ( $https != "вкл." ) {
вернуть 301 https://$server_name$request_uri;
}
расположение ~ \.php$ {
включить фрагменты/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php-fpm.sock;
}
}
Проблема в:
- когда я получаю доступ
http://example.com/someapp/somefile.html
(или просто /какое-то приложение
), меня перенаправляют на HTTPS,
- но когда я получаю доступ
http://example.com/someapp/somefile.php
, я не перенаправляюсь на HTTPS.
Кстати, это соответствует документ, в котором говорится:
Чтобы найти местоположение, соответствующее заданному запросу, nginx сначала проверяет местоположения, определенные с помощью строк префикса (префиксные местоположения). Среди них выбирается и запоминается местоположение с самым длинным совпадающим префиксом. Затем проверяются регулярные выражения в порядке их появления в конфигурационном файле. Поиск регулярных выражений завершается при первом совпадении, и используется соответствующая конфигурация. Если совпадение с регулярным выражением не найдено, то используется запомненная ранее конфигурация расположения префикса.
Так когда расположение ~ \.php$
это совпадение, местоположение /какое-то приложение
игнорируется, даже если запрос .../какое-то приложение/somefile.php
.
Имея расположение ~ \.php$ {...}
блокировать вне родителя местоположение /someapp {...}
block не меняет это поведение.
Как я могу перенаправить каждый HTTP-запрос на HTTPS на /какое-то приложение
без необходимость дублировать если
и возвращаться
строки в блок местоположения php?