パーマリンクが投稿名に設定されている 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
両方あなたそしてpWordPressのページであり、pユーザー名を取得できるショートコードが含まれています。
ができたhttps://example.com/p/?username=john71、しかし、次のようになります:https://example.com/u/john71見た目が良くなりました。
書き換えルールやアプローチに関する助言があれば歓迎します。
答え1
URI は最終的に次のように書き換えられる/index.php
ため、余分な内部書き換えは WordPress によって認識されることはありません。
WordPress は、REQUEST_URI パラメータで渡される元のリクエストを解析します (これは、fastcgi-php.conf
という別のファイルからインクルードされる可能性のある、 ファイル内で定義されます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