
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.php
das Skript als $_SERVER['REQUEST_URI']
Array-Elementwert verfügbar sein.
Sie können auch rewrite
die 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.php
als 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 ( 1
für die /product/1.html
URI, 2
für die URI usw.) dem Skript als Array-Elementwert zur Verfügung./product/2.html
product.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>;
}