mod_rewrite

südpol

Erfahrenes Mitglied
Hi,

ok passt nicht 100 % zu PHP aber das Thema kann wohl zu keinem Bereich eindeutig zugeordnet werden ;)

Ich habe eine Verständnisfrage zu dem Thema mod_rewrite. Ich würde meine Seite gerne Suchmaschinen freundlich machen und dafür mod_rewrite verwenden.

Wenn ich das ganze Thema nun richtig verstanden habe muss ich mir ein bestimmtes Schema für meine $_GET Variablen überlegen welches immer eingehalten werden muss um die url dann via regex zerlegen zu können. Einen andereren Weg (z. B. einbauen des Variablen Namen oder so) gibt es nicht?

Liebe Grüße
 
südpol hat gesagt.:
Einen andereren Weg (z. B. einbauen des Variablen Namen oder so) gibt es nicht?
Doch schon... das was du zuerst beschrieben hast, funktioniert doch damit.
Angenommen, du willst einer index.php eine Variable mit einem Wert übergeben.

Dann nehme bspw. einen Aufruf a'la index_variablenname_variablenwert
Per mod_rewrite und RegExp kannst du das dann problemlos umschreiben auf index.php?variablenname=variablenwert
Oder meintest du etwas anderes?

BTW: Da mod_rewrite ein Modul des Apache-Webservers ist, sind diesbezügliche Themen im Webserver-Forum bestens aufgehoben;)
 
Sven Mintel hat gesagt.:
Doch schon... das was du zuerst beschrieben hast, funktioniert doch damit.
Angenommen, du willst einer index.php eine Variable mit einem Wert übergeben.

Dann nehme bspw. einen Aufruf a'la index_variablenname_variablenwert
Per mod_rewrite und RegExp kannst du das dann problemlos umschreiben auf index.php?variablenname=variablenwert
Oder meintest du etwas anderes?
hmm ok perfekt genau so hätte ich das gerne. Hat jemand zufällig schon eine .htaccess die das leistet?
BTW: Da mod_rewrite ein Modul des Apache-Webservers ist, sind diesbezügliche Themen im Webserver-Forum bestens aufgehoben;)
hmm ok das ist auch wieder richtig :-)

Danke
 
Code:
RewriteEngine On
Options +FollowSymlinks
RewriteBase /

RewriteRule ^index_([0-9a-z]+)_([0-9a-z]+).html$ index.php?$1=$2 [L]
So sieht's aus. mit index_var_5.html rufst du index.php?var=5 auf
Denke, das ist selbsterklärend. Und das [L] gibt an, dass es die letzteRegel ist.
[edit]achja, var und der wert dürfen hier nur aus kleinbuchstaben und ziffern bestehen, keine sonderzeichen etc...[/edit]
 
Hi,

sorry, das ich mich erst jetzt melde - musste kurzfristig nach Japan und habe erst jetzt wieder Zeit mich ein bisschen damit zu beschäften.

Danke erst mal noch für die Antwort. Das sieht schon mal sehr vielversprechen aus!

Würde das ganze auch wie folgt funktionieren:

Code:
RewriteEngine On
Options +FollowSymlinks
RewriteBase /

RewriteRule ^([0-9a-z]+)__([0-9a-z]+)/index.html$ index.php?$1=$2 [L]

wenn dann index.php?var=5 aufgerufen wird soll das ganze in var__5/index.html umgewandelt werden.

funktioniert das o. g. Beispiel automatisch mit beliebig vielen $_GET variablen? also auch:

index.php?section=home&action=test&id=5
wird zu
/section__home/action__test/id__5/index.html

oder brauche ich dafür noch eine schleife?

Sorry für die vielen Fragen - würde das ganze normal selber testen habe derzeit jedoch nur beschränkten Zugriff auf meine Testumgebung :(

Danke für die Hilfe!
 
Ich denke, die zusätzliche Angabe der Parameterbezeichner ist überflüssig. Stattdessen hätte ich es etwa so gemacht:
Code:
RewriteEngine	On
RewriteBase	/
RewriteRule	^([0-9a-z]+)/([0-9a-z]+)/([0-9]+)/?$	index.php?section=$1&action=$2&id=$3	[L]
Damit würde eine Anfrage des Schemas /home/test/5 zu index.php?section=home&action=test&id=5 umgeschrieben.
 
Hi,

das hätte aber zur Folge, dass auf jeder Seite das gleiche Schema für die Übergabe der $_GET Variablen verwenden müsst. Das ist leider aktuell noch nicht überall gegeben. Daher würde ich bis zum nächsten Release meiner Homepage gerne den Namen der Variablen mit übergeben.

Wenn ich das aus deinem code richtig abgeleitet habe müsste es somit so aussehen:

Code:
RewriteEngine	On
RewriteBase	/
RewriteRule	^([0-9a-z]+)__([0-9a-z]+)/([0-9a-z]+)__([0-9a-z]+)/([0-9a-z]+)__([0-9a-z]+)/([0-9a-z]+)__([0-9a-z]+)/?$	index.php?$1=$2&$3=$4&5=$6&$7=&8 [L]

richtig?

noch ne andere Frage - wie werden die Variablen wieder für die Scripte über das Globale array $_GET verfügbar? Geht der Browser da die o. g. Regel intern wieder in die andere Richtung oder muss ich das via PHP abfangen und umwandeln?

Gruß
 
Hi,

ok habe das ganze jetzt mal getestet. Leider erhalte ich einen "500 Internal Server Error". Hat jemand die codeschnipsel oben schon mal erfolgreich getestet?

Gruß
 
Bist du sicher, dass du mod_rewrite überhaupt benutzen darfst?

Packe mal nur dies:
RewriteEngine On
...in die htaccess.
Tritt der 500 dann immer noch auf, darfst du mod_rewrite nicht verwenden.


Ansonsten: wenn du es daheim auf WIN probierst, machs mal so:
Code:
RewriteEngine	On
RewriteBase	/
RewriteRule	^([0-9a-z]+)__([0-9a-z]+)/([0-9a-z]+)__([0-9a-z]+)/([0-9a-z]+)__([0-9a-z]+)/([0-9a-z]+)__([0-9a-z]+)/?$	 /index.php?$1=$2&$3=$4&5=$6&$7=&8 [L]
 
Zurück