문제가 있습니다. HTTP 도메인 구성에 대한 NGINX 구성에서 하나를 제외한 모든 PHP 스크립트를 잡으려고 합니다.
모든 PHP 파일에 대한 일반적인 규칙이 있습니다.
location ~ \.php$ {
include fastcgi_params;
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
# With php5-fpm:
fastcgi_pass unix:/var/run/php7.4-fpm.$user.sock;
#fastcgi_pass php7-fpm-sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 600;
}
하지만 (다른 구조를 가진) HTTPS 링크로 리디렉션하려면 이전 사이트의 이전 PHP 스크립트를 처리해야 합니다.
나는 이것을 PHP 핸들러에 넣으려고했습니다.위치 / {}블록, 안으로위치/다운로드 {}차단했지만 모두 실패하고 이 스크립트에서 기본 트리거가 당겨졌습니다(PHP 핸들러의 404).
rewrite ^/download\.php\?file_id=(.*)$ https://$server_name/download/id/$1 permanent;
올바르게 처리하는 방법은 무엇입니까? 이 예외를 작동시키려면 NGINX 구성에서 어디에 넣어야 합니까? 내가 도대체 뭘 잘못하고있는 겁니까?
추신. 다른 사항을 위해 별도의 HTTP 구성을 유지해야 합니다.
답변1
좋아, 답을 찾았어. 작업 순서가 중요합니다. 에 잘 설명되어 있습니다.
그리고 해결책은 다음과 같습니다:
location ^~ /download.php {
rewrite ^ https://$server_name/download/id/$arg_file_id permanent;
}