Nginx는 리디렉션 URL의 값이 encodeURIComponent
.
location /redirect/ {
return 307 $arg_target_url;
}
브라우저에서 URL을 입력하면:
mylocalserver.com/redirect/?target_url=example.com%3Fx%3Dy%26z%3Dk
다음으로 리디렉션됩니다.
mylocalserver.com/redirect/example.com%3Fx%3Dy%26z%3Dk
URL로 리디렉션되어야 한다고 예상됩니다 example.com?x=y&z=k
.
그러나 $arg_target_url
일반 값을 포함하면 작동합니다.
답변1
nginx 및 njs 스크립트 언어를 설치하려면 설치 지침을 읽으십시오.nginx: 리눅스 패키지. 먼저 구성을 백업하십시오.
Debian의 nginx.org 안정적인 저장소를 예로 들면 nginx
설치를 위한 최소 단계와 소프트웨어 패키지는 다음과 같습니다.nginx-module-njs
echo "deb http://nginx.org/packages/debian $(lsb_release -cs) nginx" |
sudo tee /etc/apt/sources.list.d/nginx.list
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
sudo apt update
sudo apt install nginx nginx-module-njs
행 추가
load_module modules/ngx_http_js_module.so;
기본 구성(
nginx.conf
)으로 변경하세요.http.js
다음 내용으로 nginx 구성 디렉터리에 파일을 만듭니다.function decoded_target_url(r) { return decodeURIComponent(r.args.target_url); } export default {decoded_target_url};
기본 구성을 다음으로 변경하십시오.
js_import http.js; js_set $decoded_target_url http.decoded_target_url; server { # ... more stuff default_type text/html; location /redirect/ { return 307 $decoded_target_url; } # ... more stuff }
실행
nginx -t
하여 구성을 확인하고 서버를 다시 시작합니다.
다음과 같은 쿼리 매개변수에 프로토콜( http://
또는 ) 을 추가해야 합니다 .https://
mylocalserver.com/redirect/?target_url=http%3A%2F%2Fexample.com%2F%3Fx%3Dy%26z%3Dk
또는 변경
return 307 $decoded_target_url
하드코딩하다
return 307 http://$decoded_target_url
또는
return 307 https://$decoded_target_url
관련된 문서: