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

[FRAGE] htaccess REQUEST_URI escapen

Ja "redirect" ist hald nicht gleich "redirected"... du musst dich schon entscheiden, was du als Flag verwenden willst ;)
 
Code:
RewriteEngine On

RewriteCond %{QUERY_STRING} !redirected$
RewriteCond %{QUERY_STRING} ^([^&]*)$
RewriteRule ^ http://julian-jp.tk/?url=http://%{HTTP_HOST}%{REQUEST_URI}\?%1 [L,NE]

RewriteCond %{QUERY_STRING} !redirected$
RewriteCond %{QUERY_STRING} ^(.*?)(\&)(.*)$
RewriteRule ^ http://julian-jp.tk/?url=http://%{HTTP_HOST}%{REQUEST_URI}?%1\%26%3 [N,NE]
Problem: bei Aufrufen mit mehreren Query-Parametern (z.B. http://julian-jp.tk/test.php?query&get=param) werden beide Regeln angewandt und auf http://julian-jp.tk/?url=http://julian-jp.tk/test.php?url=http://julian-jp.tk/test.php?query%26get=param umgeleitet.
Wie kann ich dies verhindern? Es soll bei mehreren Query-Parametern logischerweise nur die untere RewriteRule greifen...
 
Ah - da ist ein Fehler in der unteren Regel. Die darf nicht die Umleitung machen, sondern das darf nur dir erste:
Code:
RewriteCond %{QUERY_STRING} !redirected$
RewriteCond %{QUERY_STRING} ^(.*?)(\&)(.*)$
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI}?%1\%26%3 [N,NE]
 
Wie genau muss denn dann die vollständige .htaccess aussehen? So bekomme ich nämlich einen 500:
Code:
RewriteEngine On

RewriteCond %{QUERY_STRING} !redirected$
RewriteCond %{QUERY_STRING} ^([^&]*)$
RewriteRule ^ http://julian-jp.tk/?url=http://%{HTTP_HOST}%{REQUEST_URI}\?%1 [L,NE,R]

RewriteCond %{QUERY_STRING} !redirected$
RewriteCond %{QUERY_STRING} ^(.*?)(\&)(.*)$ RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI}?%1\%26%3 [N,NE]
 
Ach verdammter Mist - Chrome spinnt seit einigen Tagen beim Copy&Paste total! Teilweise klatscht er mir auch beim Einfügen statt Leerzeichen in UTF-8 unsichtbare Zeichen rein, die man dann erst in ISO-8859-1 sieht...
 
Bin erst jetzt (gezwungenermaßen) zum Testen gekommen - mein FTP-Server war für mehr als einen halben Tag down. Ja, jetzt funktioniert das Umleiten korrekt. Danke dir!

PS: dafür mache ich jetzt nicht extra einen Thread auf, vielleicht kannst du mir noch schnell dabei helfen:
Code:
#WWW to non-WWW
RewriteCond %{HTTP_HOST} www.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/%{REQUEST_URI} [R=308,L]
Klappt soweit auch perfekt - nur ein kleiner Schönheitsfehler tritt auf: http://www.example.com wird zu http://www.example.com//. Wie verhindere ich den zweiten Slash?
 
Bitte - gern geschenen.

Wie verhindere ich den zweiten Slash?
Du könntest zwei Regeln machen. Die eine für URIs, deren REQUEST_URI nicht leer ist und eine für leere REQUEST_URIs. Erstere schaut so aus wie die von dir, nur dass noch ein RewriteCond da ist, die prüft ob REQUEST_URI auch etwas enthält. Und die zweite kommt danach und schaut so aus wie deine, nur dass das /%{REQUEST_URI} nicht da ist.
 
Zuletzt bearbeitet von einem Moderator:
Hab jetzt eine einfachere simple Lösung gefunden:
Code:
#WWW to non-WWW
RewriteCond %{HTTP_HOST} www.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [L,NE,QSA,R=308]
Einfach den Slash weggelassen - jetzt funktioniert es in beiden Varianten (mit und ohne Pfad) perfekt.
 
Das ist natürlich eleganter.

Du könntest die RewriteRule noch etwas kürzer machen, da du ja eigentlich nichts matchen willst:
Code:
RewriteRule ^ http://%1%{REQUEST_URI} [L,NE,QSA,R=308]
 
Nur so kann man den Platz auf dem Server optimal ausnutzen

... und es sollte auch noch etwas schneller sein... ;)
 
Zurück
Oben