영구 링크가 게시물 이름으로 설정된 WordPress 사이트가 있습니다.
Nginx 재작성을 사용하여 내부 리디렉션(브라우저 URL 변경 없음)을 시도하고 있지만 지금까지는 실패했습니다.
작동하지만 URL이 변경됩니다.
location ~ ^/u/(.*) {
rewrite ^/u/(.*) /p/?username=$1 redirect;
}
왜 이것이 작동하지 않는지 이해할 수 없습니다.
location ~ ^/u/(.*) {
# this returns 404
rewrite ^/u/(.*) /p/?username=$1 last;
}
전체 구성
server {
listen 80;
listen [::]:80;
server_name example.com;
root /srv/www/html;
error_log /var/log/nginx/error.log;
index index.php;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ ^/u/(.*) {
rewrite ^/u/(.*) /p/?username=$1 last;
# try_files $uri /p/?username=$1;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
client_max_body_size 8M;
include fastcgi-php.conf;
# Mitigate https://httpoxy.org/ vulnerabilities
fastcgi_param HTTP_PROXY "";
fastcgi_intercept_errors on;
fastcgi_pass 0.0.0.0:9000;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}
나는 WordPress 플러그인을 작성 중이며 사용자가 다음과 같은 URL을 입력하기를 원합니다.https://example.com/u/john71내부적으로 리디렉션https://example.com/p/?username=john71
둘 다유그리고피WordPress 페이지이며,피사용자 이름을 검색할 수 있는 단축 코드가 포함되어 있습니다.
나는 가질 수 있었다https://example.com/p/?username=john71, 하지만 다음과 같습니다.https://example.com/u/john71더 좋아 보인다.
재작성 규칙이나 접근 방식에 대한 도움을 환영합니다.
답변1
URI는 궁극적으로 다음과 같이 다시 작성됩니다 /index.php
. 따라서 추가 내부 다시 작성은 WordPress에서 볼 수 없습니다.
fastcgi-php.conf
WordPress는 REQUEST_URI 매개변수( 파일에 정의되며 아마도 이라는 다른 파일의 요청을 포함할 수 있음 fastcgi_params
) 로 전달된 원래 요청을 구문 분석합니다 .
호출하기 전에 REQUEST_URI 및 SCRIPT_FILENAME을 직접 설정하여 이 작업을 수행할 수 있습니다. fastcgi_pass
예를 들면 다음과 같습니다.
location ~ ^/u/(.*) {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_param REQUEST_URI /p/?username=$1;
fastcgi_param HTTP_PROXY "";
fastcgi_intercept_errors on;
fastcgi_pass 0.0.0.0:9000;
}
여기에는 작동하지 않는 설명이 fastcgi-php.conf
포함되어 있을 수 있으므로 포함하지 않았습니다 .try_files
location