Um eine ganze Website als statisches HTML zu spiegeln,
Ich möchte URLs konvertieren , wie http://example.com/script.php?t=12
zu http://example.com/script.php_t=12
.
Hinweis ?
in URL wird konvertiert _
.
Auf diese Weise kann Nginx oder Apache diese Dateien von der Festplatte als unformatiertes HTML bereitstellen, das wir erhalten und gespeichert haben wget
- eine Datei für jede URL - und nicht als PHP-Datei.
Ist dies über das Umschreiben von Nginx-URLs möglich?
http://example.com/script.php?a=1&t=3
wird einige supert
wief
,u
etc.Antworten:
Ich habe diese Arbeit mit try_files:
Dadurch wird versucht, eine Datei auf der Festplatte zu finden, die nach dem Muster benannt ist, das Sie mit einem "_" anstelle des "?"
Die weitere Konfiguration hängt davon ab, wie Sie statische Dateien wie Bilder oder Stylesheets gespeichert haben. Sie können einen Fallback hinzufügen, der versucht, sie ohne Abfragezeichenfolge auf dem Datenträger zu lesen:
quelle
location ~ \.php$
reinlegen, können wirtry_files
arbeiten, aber es funktioniert nicht inlocation /
Etwas in die richtige Richtung:
quelle
?
mir verwendete Antwort ausgelassen ..*
im ersten Rewrite-Parameter eine strengere Klausel angeben. Das ist sehr hilfreich!Ich glaube nicht, dass Sie dies mit Vanille-Nginx tun können, aber wenn Sie bereit sind, das Lua-Modul für Nginx ( http://wiki.nginx.org/HttpLuaModule ) zu installieren , können Sie es tun.
Getestet es vor Ort und scheint zu tun, was Sie suchen. Wenn Sie andere Parameter durch Et-Zeichen voneinander trennen möchten, ändern Sie den Block rewrite_by_lua in
quelle
Dies funktioniert unter Nginx / 1.6.2.
Persönlich würde ich jedoch eine
try_files
Lösung mit einem Fallback auf einen ursprünglichen URI verwenden, falls vorhanden .Wenn Sie z. B. eine
script.php
Festplatte haben, wird diese zuerst ausprobiert, und wenn keine vorhanden ist, wird sie verwendetscript.php_t=12
.try_files
benötigt eine aktuelle Version von Nginx.Und wenn dies nicht genug ist, können Sie dies in einem tun
if
:quelle
?
Nun , wenn Sie am Ende Ihres Umschreibens dort ein hinzufügen , damit die Abfrageparameter nicht hinzugefügt werden ..)try_files
wird anhalten,$uri
wenn es einen passenden Standortblock gibt, oder eine Datei dafür (die Anfrage ohne Argumente) - ist das der Fall??
hat keine sichtbaren Auswirkungen auf statische Dateien. In Ihren Zugriffsprotokollen wird nur eine zusätzliche Abfrage angezeigt . Wenn es Ihnen etwasDas Wiki sagt
Also
rewrite ^ ${uri}_$args? last;
sollte das funktionieren.quelle
rewrite ^ $uri_$args? last;
Die oben vorgeschlagenen Antworten sollten funktionieren. Sie sehen jedoch, wie sensibel Ihre URL wird. Da nginx zuerst versucht, zu überprüfen, ob der Dateiname auf dem Server vorhanden ist, wird er durch jeden zusätzlichen Parameter deaktiviert.
Mein Vorschlag ist, die URL so zu belassen wie sie ist und sie mit PHP korrekt in die Datei zu leiten. Sie haben Zugriff auf den
t
Parameter.quelle