.htaccess RewriteRule mit Query String
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anfang
angabe
arbeiten
code
frage
http
index
jemand
klappen
letzteres schema
nehmen
schema
server
string
test
testen
umleitung
url
weiterleiten
weiterleitung
-
Hi,
ich habe eine Frage zu .htaccess RewriteCond und RewriteRule in Verbindung mit Query Strings.
Ich würde gerne folgendes URL Schema http://example.com/?abc/123-xyz/ auf http://example.com weiterleiten, nicht aber http://example.com/abc/123-xyz/.
Nun dachte ich mir, dass es hiermit
klappen müsste, dem ist aber leider nicht so, da auch letzteres Schema auf die Hauptseite umgeleitet wird.RewriteCond %{QUERY_STRING} ^[a-z]+/[0-9]+- [NC] RewriteRule ^(.*)$ http://example.com/? [R=301]
Ist das überhaupt möglich? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Sorry, ich hatte zuvor Mist geschrieben.
Ein Test bei mir ergab jetzt, dass sich deine .htaccess verhält, wie von dir gewünscht:
http://fuerderer.12hp.de/?abc/123-xyz/
http://fuerderer.12hp.de/abc/123-xyz/
Hast du selbst zuvor schon an der .htaccess herumgebastelt und probiert? Denn eine 301er Weiterleitung wird gerne mal gecached und wirkt dann auch noch, wenn die .htacess wieder verändert wurde.
Beitrag zuletzt geändert: 11.5.2015 6:41:26 von fuerderer -
Hi,
sowie ich die RewriteRule aktiviere werden wie gesagt beide Links redirected. Sie befindet sich am Anfang der .htaccess und gecached wird es auch nicht. -
Wo hast du die .htaccess denn gespeichert? Kannst du einen Link schicken?
Oder zumindest einmal, auf welchem Server du das ganze ausprobierst. (Lima-City, anderer Webhoster, xampp, ...)
Um das Cacheverhalten zu testen, hast du die .htaccess deaktiviert, richtig? Das heißt, dann wurde auch nichts mehr weitergeleitet? -
silecom schrieb:
sowie ich die RewriteRule aktiviere werden wie gesagt beide Links redirected. Sie befindet sich am Anfang der .htaccess und gecached wird es auch nicht.
"Am Anfang" ... das könnte ein Grund sein, da Du bei der Rule nicht angegeben hast, das Rewriting zu beenden, wenn sie greift. Ein zusätzliches ",L" beim "R=301" könnte schon helfen.
Beitrag zuletzt geändert: 12.5.2015 1:40:00 von fatfreddy -
Konnte es jetzt lösen, verstehe es allerdings nicht so ganz.
Es gab nach dieser RewriteRule noch eine weitere RewriteRule auf die index.php mit demselben Query String als Query String (index.php?$1/$2). Dabei wird dann die .htaccess anscheinend nochmals angesteuert und meine eingangs erwähnte RewriteRule schlagend, was mir nicht bewusst war.
Hat hierzu jemand vielleicht noch eine Erklärung? -
Hallo
ich würde das ganze anders machen. ich würde erst allgemein eine umleitung per htaccess auf die index.php machen
RewriteEngine On RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule .* /index.php
und dann in php
$URI = $_SERVER['REQUEST_URI']; if(strpos($URI , "?")){ $URI_explode = explode("?" , $URI); $URI_explode = explode("/" , $URI_explode['1']); }else{ $URI_explode = explode("?" , $URI); }
alle angaben aus der URI nehmen und endsprechende aktionen ausführen.
noch einfacher anstatt mit example.com/?abc/abc bzw example.com/abc/abc zu arbeiten kannst du einfacher example.com/?/abc/abc oder example.com/abc/abc achreiben. dann prüfst du nur noch dein $URI_explode['0'] ob da ein ? drinn steht und leitest dann endsprechend weiter
Gruß
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage