We are in the process of migrating this forum. A new space will be available soon. We are sorry for the inconvenience.

[Apache] mod_rewrite


markusb
21.07.09, 17:43
Hab ich das richtig verstanden:
Du hast ne Website, bestehend aus einer Seite (www.xyz.de/neu/index.php).
Der URL gibst du verschiedene Parameter mit, um bestimmten Content an zu zeigen.

Jetzt hast du das Problem, dass derzeit nur URLs zu html seiten umgeschrieben werden. Du möchtest aber erkenne (warum auch immer) ob es eine html, php oder endungslose Datei ist.

Da ist die Frage: Wo möchtest du das erkennen? Und was soll mit .php/Endungslosen-Dateien passieren?


Bsp: für html UND php Dateien zum Rewriten

Code:
#Basisrewrite
RewriteRule ^([^/]+).(html|php)$                                          index.php?ordner=center&datei=$1
RewriteRule ^([^/]+)/([^/]+).(html|php)$                              index.php?ordner=center&uordner=$1&datei=$2
RewriteRule ^([^/]+)/([^/]+)/([^/]+).(html|php)$                  index.php?ordner=center&uordner=$1&uordner2=$2&datei=$3

Bsp: Rewritet alles und übergibt die endung als parameter

Code:
#Basisrewrite
RewriteRule ^([^/]+).(.*?)$                                          index.php?ordner=center&datei=$1&endung=$2
RewriteRule ^([^/]+)/([^/]+).(.*?)$                              index.php?ordner=center&uordner=$1&datei=$2&endung=$3
RewriteRule ^([^/]+)/([^/]+)/([^/]+).(.*?)$                  index.php?ordner=center&uordner=$1&uordner2=$2&datei=$3&endung=$4
Allgemein willst du sicher fast immer Minimum-Match einsetzen (so wird der Inhalt der Datei deutlich kleiner:

Code:
#Basisrewrite
RewriteRule ^(.+?).(.*?)$                                          index.php?ordner=center&datei=$1&endung=$2 [L]
RewriteRule ^(.+?)/(.+?).(.*?)$                              index.php?ordner=center&uordner=$1&datei=$2&endung=$3 [L]
RewriteRule ^(.+?)/(.+?)/(.+?).(.*?)$                  index.php?ordner=center&uordner=$1&uordner2=$2&datei=$3&endung=$4 [L]
#Ohne Endung
RewriteRule ^(.+?)$                                          index.php?ordner=center&datei=$1
RewriteRule ^(.+?)/(.+?)$                              index.php?ordner=center&uordner=$1&datei=$2
RewriteRule ^(.+?)/(.+?)/(.+?)$                  index.php?ordner=center&uordner=$1&uordner2=$2&datei=$3
Das ersetzen der Links im Quelltext ist wohl nicht so einfach wie du dir erhoffst, da musst du schon Handanlegen oder Handanlegen lassen (z.B. deine Freundin, ein Tool [wobei mir namentlich keines bekannt ist, jedoch dürfte es nicht zu schwer sein, ein kleinen Rewrite-Tool selber zu programmieren], ...)

[Edit: Fehler bei Minimum-Match]

k!mmel
21.07.09, 08:53
ich nutze nun folgende .htaccess um URLs umzuschreiben:
Code:
RewriteEngine on
RewriteBase /neu/

ErrorDocument 404 http://www.xyz.de/neu/ 
#Basisrewrite
RewriteRule ^([^/]+).html$                                          index.php?ordner=center&datei=$1
RewriteRule ^([^/]+)/([^/]+).html$                              index.php?ordner=center&uordner=$1&datei=$2
RewriteRule ^([^/]+)/([^/]+)/([^/]+).html$                  index.php?ordner=center&uordner=$1&uordner2=$2&datei=$3
Allerdings werden nun nur .html Dateien umgeschrieben. Ich möchte aber, dass mod_rewrite erkennt, ob die umzuschreibende Adresse eine .html- , .php- oder gar keine Dateiendung besitzt.

Außerdem nutze ich zur Zeit keine Weiterleitungen und daher sind die ganzen Urls auf meiner Seite im Stil von " index.php?ordner=center&datei=xyz". Wie kann ich die URLs in der Adresszeile nun so ändern, dass die umgeschriebenen mod_rewrite URLs darin stehen ohne dass ich alle Dateien einzeln bearbeiten muss? (Also die aus dem Code oben -> .htaccess).

Wie mache ich das?

MfG

whyte
03.06.09, 17:56
Muss ich meiner Freundin mal sagen ...

k!mmel
03.06.09, 16:16
Ich zitiere meine Freundin:
Ohhh, bist Du gut

Aber jetzt funktionieren meine "normalen" Links nicht mehr über "index.php?ordner=center&datei=dateixyz" ;-). Ich bräuchte aber beide Möglichkeiten.

//Edit: Also ich hänge quasi nach dem Aufruf einer solchen Weiterleitung im Ordner "center" fest. Ich arbeite aber im Ordner "/neu/".

Ich hoffe ihr versteht was ich meine...

//Edit²:

Problem folgendermaßen gelöst:
Code:
RewriteEngine on
RewriteRule ^center/(.*).html$ http://www.domain.tld/neu/index.php?ordner=center&datei=$1
MfG

whyte
03.06.09, 16:09
Mach mal spasseshalber den / vor dem center weg.
Ich weiss aber nicht, ob das klappt, ich kanns leider im Moment nicht ausprobieren ...

k!mmel
03.06.09, 15:43
Hallo,

ich kenne mich wenig mit den Rewrite-Rules des Apachen aus und habe nun eine kleine Frage:
Ich habe eine URL in Form von

"http://domain.tld/neu/center/dateixyz.html"

und möchte diese per mod_rewrite zu

"http://domain.tld/neu/index.php?ordner=center&datei=dateixyz"

umschreiben bzw. weiterleiten lassen. Ich nutze dazu diesen Code in meiner .htaccess:
Code:
RewriteEngine on
RewriteBase /neu/
RewriteRule ^/center/(.*).html$ index.php?ordner=center&datei=$1
Leider funktioniert dieser Code nicht. Die .htaccess liegt im Verzeichnis "/neu/".

Wo liegt mein Fehler? mod_rewrite ist definitiv auf dem Server aktiv.

MfG