Tôi có cấu hình sau bên trong nginx người phục vụ {...}
chặn:
vị trí / một số ứng dụng {
nếu ( $https != "bật" ) {
trả về 301 https://$server_name$request_uri;
}
vị trí ~ \.php$ {
bao gồm đoạn trích/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php-fpm.sock;
}
}
Vấn đề là:
- khi tôi truy cập
http://example.com/someapp/somefile.html
(hoặc chỉ /someapp
), tôi được chuyển hướng đến HTTPS,
- nhưng khi tôi truy cập
http://example.com/someapp/somefile.php
, Tôi không được chuyển hướng đến HTTPS.
Nhân tiện, điều này phù hợp với tài liệu, điều đó nói:
Để tìm vị trí phù hợp với một yêu cầu nhất định, trước tiên nginx kiểm tra các vị trí được xác định bằng cách sử dụng chuỗi tiền tố (vị trí tiền tố). Trong số đó, vị trí có tiền tố khớp dài nhất được chọn và ghi nhớ. Sau đó, các biểu thức chính quy được kiểm tra, theo thứ tự xuất hiện của chúng trong tệp cấu hình. Việc tìm kiếm các biểu thức chính quy kết thúc ở lần khớp đầu tiên và cấu hình tương ứng được sử dụng. Nếu không tìm thấy kết quả khớp với biểu thức chính quy thì cấu hình của vị trí tiền tố được ghi nhớ trước đó sẽ được sử dụng.
Vì vậy, khi vị trí ~ \.php$
là một trận đấu, vị trí / ứng dụng nào đó
bị bỏ qua, ngay cả khi yêu cầu dành cho .../someapp/somefile.php
.
có vị trí ~ \.php$ {...}
khối bên ngoài của cha mẹ vị trí /someapp {...}
block không thay đổi hành vi này.
Làm cách nào tôi có thể chuyển hướng mọi yêu cầu HTTP sang HTTPS tới /someapp
không có phải sao chép nếu
và trở lại
dòng vào khối vị trí php?