• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

htaccess - gesamten Query in URL umschreiben

J

j-l-n

Guest
Ich möchte, dass alle Parameter in der URL zu Pfaden umgeschrieben werden.
Es soll also beispielsweise statt http://example.com/path/index.php?get=parameter&second=value in der Adressleiste http://example.com/path/index.php/get/parameter/second/value angezeigt werden.

Habe bereits einige Beiträge dazu gefunden (z.B. Rewrite PHP all GET parameters .htaccess - Stack Overflow), diese haben aber nicht funktioniert.
 
Zuletzt bearbeitet:
Ich glaube, die GET Parameter kann man mit
Code:
RewriteCond %{QUERY_STRING} (.+)=(.+)
einlesen und dann mit
Code:
RewriteRule .*  http://example.com/path/index.php/%1/%2 [L]
umleiten. Versuch das mal bitte, ich bin nicht sicher.
 
Versuch das mal bitte, ich bin nicht sicher.
Liefert leider einen HTTP 500. Und bei der RewriteRule bräuchte ich einen variablen Pfad, weil ja auch zum Beispiel http://example.con/path/path2/other-name.php?get=param umgeformt werden soll.

EDIT: So funktioniert es
Code:
RewriteRule (.*?)index\.php?/*(.*) /$1$2 [R=301,L,QSA,NC,NE]


RewriteCond %{QUERY_STRING} (.*)=(.*)
RewriteRule .* index.php/%1/%2 [L,NC]
Nun bräuchte ich allerdings noch, dass der Name von "index.php" variabel zum Skriptnamen ist. Und außerdem wird durch die obere Regel (index.php aus der URL zu entfernen) der Fehler "zu viele Weiterleitungen erzeugt".
 
Zuletzt bearbeitet:
Bist du sicher, dass solche komplexen Sachen über Rewrite gemacht werden können? Warum muss das überhaupt gemacht werden? Warum haben denn die Besucher die falschen URL's?
 
Jetzt funktioniert's:
Code:
RewriteCond %{QUERY_STRING} (.*)=(.*)
RewriteRule .* index.php/%1/%2? [L,NC]
Problem: wie setze ich nun einen variablen Skriptnamen in der RewriteRule ein?



PS: folgender Code:
Code:
RewriteCond %{HTTP_HOST} ^(www.)?julian-jp\.tk$
RewriteRule ^developer/(.*)$ http://www.developer.julian-jp.tk/$1 [L,NC,NE,QSA,R=301]
RewriteCond %{HTTP_HOST} ^(www.)?julian-jp\.tk$
RewriteRule ^projects/(.*)$ http://www.projects.julian-jp.tk/$1 [L,NC,NE,QSA,R=301]

#index.php aus URL entfernen
RewriteRule (.*?)index\.php?/*(.*) /$1$2 [L,NC,NE,QSA,R=301]

#Query zu Pfad umschreiben
RewriteCond %{QUERY_STRING} (.*)=(.*)
RewriteRule .* index.php/%1/%2? [L,NC]
Warum leitet der Aufruf von developer.julian-jp.tk/index.php zu developer.julian-jp.tk/developer um???
 
Zuletzt bearbeitet:
Oh... sehe gerade einen Fehler - ev. liegt's daran:
Code:
RewriteRule ^(.+?)\.php $1.php/%1/%2? [L,NC]
- glaub' aber eher nicht.

Code:
RewriteRule ^([^.]+)\.php $1.php/%1/%2? [L,NC]
 
OK - probieren wir's mal etwas flexibler
Code:
RewriteRule ([^.]*)\.php.* $1.php/%1/%2? [L,NC]
Da funktioniert es jetzt nur bei http://julian-jp.tk/?get=param, das wird umgeformt. Aber http://julian-jp.tk/ob.php?get=param zum Beispiel leitet nicht um. Komisch...
 
Das muss an den anderen Regeln liegen - bei mir funktioniert's.

Woran machst du denn fest, dass das nicht umleitet? Im Browser siehst du ja nichts, da du keinen Redirect machst.
 
Woran machst du denn fest, dass das nicht umleitet? Im Browser siehst du ja nichts, da du keinen Redirect machst.
Na klar! Daran lag's, das hatte ich total vergessen. Es war ja der Sinn, dass sich die URL sichtbar ändert...
Danke! Könnten wir das jetzt noch so hinbekommen, dass die Dateiendung ebenfalls variabel (also z.B. entweder .php, .html, oder .aspx) ist?
EDIT: Ne, ich glaub, das ist zu aufwändig...
Oder könnte man da nicht einfach die RewriteRule dreimal kopieren und jeweils pro Regel dann für einen Dateityp gültig machen?!
 
Zuletzt bearbeitet:
Variabel Dateiendungen sind keine Hexerei:
Code:
RewriteRule ([^.]*)\.(\w+).* $1.$2/%1/%2? [L,NC]
- wobei das jetzt auch auf URL wirken kann, wo es nicht wirken soll.

Wenn du nur bestimmte Dateiendungen umleiten willst, kannst du das machen:
Code:
RewriteRule ([^.]*)\.(php|html?|aspx).* $1.$2/%1/%2? [L,NC]
 
Was bewirkt denn hier eigentlich das Fragezeichen nach html?
Code:
RewriteRule ([^.]*)\.(php|html?|aspx).* $1.$2/%1/%2? [L,NC]

Und wenn nun jemand einen "schönen" Pfad wie http://julian-jp.tk/path/file.php/get/param eingibt, wie schreibe ich den (in der URL unsichtbar) wieder zurück auf http://julian-jp.tk/path/file.php?get=param um, damit PHP die GET-Werte verarbeiten kann?
Die Bedingung dürfte vermutlich
Code:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
sein, oder?
Wie lautet die zugehörige RewriteRule?
 
Was bewirkt denn hier eigentlich das Fragezeichen nach html?
Dann passt es auch auf .htm Dateien.

Und wenn nun jemand einen "schönen" Pfad wie http://julian-jp.tk/path/file.php/get/param eingibt, wie schreibe ich den (in der URL unsichtbar) wieder zurück auf http://julian-jp.tk/path/file.php?get=param um, damit PHP die GET-Werte verarbeiten kann?
Da brauchst du eigentlich gar nichts umschreiben. Du kann den hinteren Teil über $_SERVER["PATH_INFO"] auslesen und dann weiterverarbeiten.
 
Da brauchst du eigentlich gar nichts umschreiben. Du kann den hinteren Teil über $_SERVER["PATH_INFO"] auslesen und dann weiterverarbeiten.
Ja, natürlich; aber ich möchte gern weiterhin die GET-Parameter wie normal benutzen, ohne meine Skripts umzuschreiben :)
 
Ich wüsste jetzt nicht, wie man das mit beliebig vielen Parametern realisieren sollte.

Ich glaube das einfachste ist, wenn du einfach alles an ein proxy-Skript umleitest, das dann das ganze Zeugs in $_GET reinschreibt und dann dan eigentliche Skript aufruft.
 
Zurück
Oben