wie leite ich einen Standort zu einem anderen um, ohne die URL in Nginx zu ändern

wie leite ich einen Standort zu einem anderen um, ohne die URL in Nginx zu ändern

Ich arbeite an einer Website zur Anzeige verschiedener Produkte. Benutzer können über URLs wie „mydomain.com/product/1.html“ oder „mydomain.com/product/2.html“ auf verschiedene Produktseiten zugreifen.

aber ich möchte diese statischen HTML-Dateien nicht direkt präsentieren, stattdessen wird zuerst ein PHP-Skript unter mydomain.com/product.php geladen

Ich möchte also 'mydomain.com/product/1.html' auf 'mydomain.com/product.php' umleiten, aber die ursprüngliche URL nicht ändern

Ich habe Alias, try_files und return ausprobiert, aber alle diese Methoden schreiben die URL in „mydomain.com/product.php“ um.

Ich bin neu bei Nginx, das ist wahrscheinlich eine sehr einfache Frage, aber ich habe einige Tage lang versucht, dies zu erreichen.

Antwort1

Es gibt so viele Möglichkeiten, dies zu tun ...

Das Einfachste ist

rewrite ^/product/ /product.php;

Bei derServerKontext. Ihre ursprüngliche Anforderungs-URI (d. h. /product/1.html) wird für product.phpdas Skript als $_SERVER['REQUEST_URI']Array-Elementwert verfügbar sein.

Sie können auch rewritedie Direktive amStandortKontext kann dies leicht (sehretwas) performanter:

location /product/ {
    rewrite ^ /product.php last;
}

Wenn Sie möchten, können Sie den Produktcode abrufen und ihn product.phpals Abfrageargument an Ihr Skript übergeben:

rewrite ^/product/(.*)\.html$ /product.php?product=$1;

oder

location /product/ {
    rewrite ^/product/(.*)\.html$ /product.php?product=$1 last;
}

Auf diese Weise steht Ihr Produktcode ( 1für die /product/1.htmlURI, 2für die URI usw.) dem Skript als Array-Elementwert zur Verfügung./product/2.htmlproduct.php$_GET['product']

Sie können hierfür sogar einen eigenen FastCGI-Handler definieren:

location /product/ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/product.php;
    fastcgi_pass <fastcgi_upstream_or_socket>;
}

(die ursprüngliche Anforderungs-URI ist verfügbar über $_SERVER['REQUEST_URI']), oder wenn Sie möchten, dass der Produktcode verfügbar ist über $_GET['product']:

location ~ /product/(.*)\.html$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/product.php;
    fastcgi_param QUERY_STRING product=$1;
    fastcgi_pass <fastcgi_upstream_or_socket>;
}

verwandte Informationen