규칙을 다시 작성하기 위해 NGINX를 사용하고 있지만, 무엇을 하든 작동하지 않습니다.
현재 링크:
/tutorials/index.php?article=2
내가 원하는 방식
/tutorials/2
내 - 현재 - NGINX 재작성 구성/규칙:
location / {
try_files $uri $uri/ =404 /index.php?$args;
rewrite ^/tutorials/([0-9]+)$ /tutorials/index.php?article=$1 last;
}
내가 여기서 뭘 잘못하고 있는 걸까?
내 NGINX 구성 파일:
server {
# Hide php extension: ".php"
if (!-e $request_filename) {
rewrite ^(.*)$ /$1.php;
}
# Redirect to HTTPS
if ($scheme = http) { return 301 https://$host$request_uri; }
# Access rule(s)
location / {
try_files $uri $uri/ =404 /index.php?$args;
}
location ~ ^/tutorials/([[:digit:]]+)$ {
rewrite ^ /tutorials/index.php?article=$1 last;
}
# Enable: PHP FPM
location ~ \.php$ {
if ($request_uri ~ /tutorials/index\.php) {
return 302 $scheme://$host/tutorials/$arg_article;
}
# Allow user execution of PHP
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.0-alpha.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
client_max_body_size 5M;
}
}
답변1
NGINX에는 외부 리디렉션과 내부 리디렉션이라는 개념이 있습니다.
기본적으로 리디렉션 루프를 생성하려는 것처럼 들리지만 내부 요청이 외부에서 수신되는지 여부에 따라 구별하여 해당 루프를 중단합니다.
귀하의 외부 URL 사양은 다음과 같습니다 /tutorials/([[:digit:]]+)
.
내부 URL 사양은 다음과 같습니다 /tutorials/index.php?article=$1
.
그렇다면 다음을 원할 수 있습니다.
location ~ ^/tutorials/([[:digit:]]+)$ {
rewrite ^ /tutorials/index.php?article=$1 last;
}
location ~ \.php$ {
if ($request_uri ~ /tutorials/index\.php) {
return 302 $scheme://$host/tutorials/$arg_article;
}
fastcgi_…
}