Page 1 of 1

RewriteRule für dynamische Seiten

Posted: 2003-08-26 17:10
by freeze
Zwecks Suchmaschinenoptimierung werden die statischen Urls per mod_rewrite für PHP aufbereitet:

Code: Select all

# /pfad/zum/artikel/23.html -> index.php?PATH=/pfad/zum/artikel/23
RewriteRule ^/(.*).html$ /index.php?PATH=$1 [QSA,L]

# /pfad/zur/kategorie/ -> index.php?PATH=/pfad/zur/kategorie/index
RewriteRule ^/(.*)/$ /index.php?PATH=$1/index [QSA,L]
Der Pfad wird dann in der index.php aufgedröselt und etwas sinnvolles wird angezeigt. So weit, so gut.

Problem: leider funktioniert das ganze nicht für Urls der Form '/pfad/zur/kategorie', also ohne letzten Slash.

Frage: wer kann mir einen Hinweis geben, wie ich bei solchen Urls den Slash hinten dran bekomme?

Hinweise: die Pfadtiefe ist beliebig (/pfad1/pfad2/pfad_n/artikel/55.html). Die Pfade existieren natürlich nicht physikalisch als Dateiverzeichnisse, 'RewriteCond %{REQUEST_FILENAME} -d' funktioniert daher auch nicht. 'RewriteRule ^/(.*)$ /index.php?PATH=$1/index [QSA,L]' geht auch nicht, dann werden zum Beispiel Pfade zu Bildern auch an index.php geschickt.

Re: RewriteRule für dynamische Seiten

Posted: 2003-08-26 22:28
by burn
Das ist jetzt wohl eine blöde Frage, aber wieso nicht einfach

Code: Select all

# /pfad/zur/kategorie -> index.php?PATH=/pfad/zur/kategorie/index 
RewriteRule ^/(.*)$ /index.php?PATH=$1/index [QSA,L]

Re: RewriteRule für dynamische Seiten

Posted: 2003-08-27 08:10
by freeze
Dann werden Urls zu Bildern, PDF-Dateien, Downloads usw. auch umgewandelt und an index.php geschickt. Aus Performancegründen sollen diese Dateien aber direkt ausgeliefert werden.

Bisher ist mir nur ein Weg eingefallen:

RewriteRule !^/(.*).(gif|jpg|png|css)$ /index.php?PATH=$1 [QSA,L]

Dann muss ich aber vorher festelegen, welche Dateien direkt ausgeliefert werden sollen. Es kommen ja noch eine Menge (pdf, zip usw.) dazu.

Finde ich nicht so gut, bei einem CM-System kann der Kunde ja alles Mögliche einbinden.

Re: RewriteRule für dynamische Seiten

Posted: 2003-08-27 11:29
by jojo1978
Leider habe ich keine Lösung für das Problem. Im Gegenteil, ich habe ein ganz ähnliches Problem. Leider funktioniert bei mir auf dem 1&1 Exklusiv Server keines der geposteten Beispiele - auch nicht die aus der 1&1 FAQ.

Nur damit ich es richtig verstehe:
Ich kopiere die Zeile in eine Datei namens .htaccess und lege sie in ein Verzeichnis auf dem Server. Diese Umleitung soll dann auch für alle Unterverzeichnisse dieses Verzeichnisses gelten.

Muss man evtl. sonst noch in igendeiner anderen Datei etwas einstellen? Warum funktioniert das bei mir nicht :(

Gruß Joachim

Re: RewriteRule für dynamische Seiten

Posted: 2003-08-27 11:59
by freeze
Meine Beispiele sind nicht für .htaccess sondern funktionieren innerhalb einer VirtualHost Konfiguration in httpd.conf. Ich glaube innerhalb der .htaccess mußt man den führenden Slash weglassen, also zum Beispiel 'RewriteRule ^(.*).html$ index.php?PATH=$1 [QSA,L]'.

Hinweis auf http://httpd.apache.org/docs/mod/mod_re ... ewriteBase
Notice: If your webserver's URLs are not directly related to physical file paths, you have to use RewriteBase in every .htaccess files where you want to use RewriteRule directives.
Sonst poste mal den Output von RewriteLog bei RewriteLogLevel 4.

Ansonsten: ja .htaccess Einstellungen gelten ist für das aktuelle und alle Unterverzeichnisse.