[Nginx] Rewrite rules funktionieren nicht wie gewollt

chans

Mitglied
Hi Leute,

Ich habe mich nach langem hin und her dazu entschlossen, Nginx als Webserver zu testen. Bisher gefällt mir die Software sehr gut, allerdings kenne ich mich mit den rewrite rules noch nicht gut aus.

Ich versuche derzeit eine URL in dieser Form:

http://example.com/index.php?page=foo
http://example.com/index.php?page=foo&page2=bar

in diese Form zu bringen:

http://example.com/foo
http://example.com/foo/bar

- - - - - - - - -

Derzeit verwende ich dazu folgende rewrite rules:

Code:
rewrite ^/(.*)$   /index.php?page=$1 last;
rewrite ^/(.*)/(.*)$   /index.php?page=$1&page2=$2 last;

Dabei habe ich 2 Probleme:

1. Sobald ich die url nun über http://example.com/foo aufrufe, werden die .css und .js Dateien nicht mehr geladen.
2. Sobald ich die url http://example.com/foo/bar aufrufe, lande ich in einer endlosschleife.

Ich nutze zusätzlich noch diese rewrite rule (für User-Profile):
Code:
rewrite ^/users/([a-zA-Z0-9_]+)$ /index.php?page=users&username=$1 last;

Die rewrite rules sind in einer extra Datei, welche ich per "include" in den server{} block der jeweiligen Domain lade.

Bin für jeden Hinweis dankbar!

Gruß
Chans
 
Hi,

dass die CSS- und JS-Dateien nicht mehr korrekt geladen werden, liegt daran, dass der Client jetzt von einem anderen Verzeichnis ausgeht ("/foo" bzw. "/foo/bar"), welches ja nicht existiert. Demnach musst du für das Einbinden absolute Pfadangaben verwenden (beginnend mit "/").

Das Problem an deinen beiden rewrites ist, dass das erste das zweite beinhaltet. Tausche also die beiden Zeilen oder ändere dein Suchmuster ab, z.B. in
Code:
rewrite ^/([^/]*)$   /index.php?page=$1 last;
rewrite ^/([^/]*)/([^/]*)$   /index.php?page=$1&page2=$2 last;

Gruß
 
Zurück