Interne Weiterleitung von WordPress mit Nginx

Interne Weiterleitung von WordPress mit Nginx

Ich habe eine WordPress-Site mit auf den Beitragsnamen eingestellten Permalinks.

Mithilfe von Nginx Rewrite versuche ich, eine interne Weiterleitung einzurichten (ohne die Browser-URL zu ändern), aber bisher gelingt mir das nicht.

Dies funktioniert, aber die URL ändert sich

location ~ ^/u/(.*) {
    rewrite ^/u/(.*) /p/?username=$1 redirect; 
}

Ich verstehe nicht, warum das nicht funktioniert:

location ~ ^/u/(.*) {
    # this returns 404
    rewrite ^/u/(.*) /p/?username=$1 last;
}

Die gesamte Konfiguration

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;
    }
}

Ich schreibe ein WordPress-Plugin und möchte, dass Benutzer URLs wie diese eingeben:https://example.com/u/john71und intern weiterleiten zuhttps://example.com/p/?username=john71

BeideSieUndPsind WordPress-Seiten undPenthält einen Kurzcode, mit dem ich den Benutzernamen abrufen kann.

ich könnte habenhttps://example.com/p/?username=john71, sondern so etwas wie:https://example.com/u/john71sieht besser aus.

Jede Hilfe bezüglich der Umschreiberegel oder des Ansatzes ist willkommen.

Antwort1

Die URI wird letztendlich umgeschrieben /index.php, sodass WordPress die zusätzliche interne Umschreibung nie bemerkt.

WordPress analysiert die ursprüngliche Anfrage, die ihm im Parameter REQUEST_URI übergeben wird (der in Ihrer Datei definiert wird fastcgi-php.conf, die ihn wahrscheinlich aus einer anderen Datei namens enthält fastcgi_params).

Dies lässt sich möglicherweise erreichen, indem Sie REQUEST_URI und SCRIPT_FILENAME direkt vor dem Aufruf festlegen fastcgi_pass, zum Beispiel:

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;
}

Ich habe es nicht eingefügt, fastcgi-php.confda es eine Anweisung enthalten könnte try_files, die hier nicht funktioniert location.

verwandte Informationen