Umleitung zum Entfernen von Suffixen nach 3 URL-Segmenten in Nginx

Umleitung zum Entfernen von Suffixen nach 3 URL-Segmenten in Nginx

Dies ist die URL, die ich brauche, um das letzte Segment zu entfernen(?order=asc)

https://www.example.com/segment_1/segment_2/page/the_number_goes_here/?order?asc

Dies ist der Code, den ich versuche:

location ~ ^/([^/]+)/([^/]+)/page/(\d+)/ {
    try_files $uri $uri/ /index.php?$args;
    # Capture the 2 segments and page number
    set $segment_1 $1;
    set $segment_2 $2;
    set $page_number $4;
    # Redirect without the sufix
    rewrite ^ /$segment_1/$segment_2/page/$page_number/ permanent;
}

Antwort1

Die locationund rewriteRichtlinien verarbeiten dienormalisierte URIwelches die Abfragezeichenfolge (die Sie „das letzte Segment“ genannt haben) nicht enthält.

Der Abfragestring steht in der $argsVariable zur Verfügung.

DerrewriteRichtliniekann optional die ursprüngliche Abfragezeichenfolge entfernen, indem ?an das Ende des Ersetzungswerts ein angehängt wird.

Zum Beispiel:

rewrite ^ /$segment_1/$segment_2/page/$page_number/? permanent;

Außerdem in Ihrem Beispielcode:

  • Die Seitenzahl wird erfasst $3und nicht$4
  • Die Anweisung ist wahrscheinlich überflüssig, da Nginx die und -Direktiven try_filesimmer zuerst auswertet .setrewrite

wird zuerst ausgewertet

verwandte Informationen