mod_rewrite - Parameter als "Verzeichnisse"

M.E.

Lt. Commander
Registriert
Jan. 2007
Beiträge
1.923
Hallo,
ich beiße mir gerade an mod_rewrite die Zähne aus und habe auch nach längerem Googeln nichts gefunden, was wirklich funktioniert.

Ich möchte folgendes machen:

example.com/index.php?cat=Bla1&pic=Bla2
soll zu
example.com/Bla1/Bla2/ werden.

An und für sich eine ganz normale Aufgabe mit mod_rewrite, ich bekomme es aber irgendwie nicht hin.
Code:
RewriteEngine on
RewriteRule ^(.*)/$ index.php?cat=$1
Das hier müsste mir doch zumindest den cat Parameter umschreiben, oder?
Leider tut sich garnichts, obwohl mod_rewrite am Server aktiviert ist und bei einem CMS das auf dem server läuft auch funktioniert.

Es gibt dann noch ein paar weitere Parameter, die ich umschreiben möchte, der einfachheit halber aber erst mal nur die zwei.
Wer kann helfen?

Und noch was: Auf welche Sprache muss ich Notepad++ stellen, damit es mir in der .htaccess Syntax Highlighting macht?

MfG
M.E.
 
Code:
RewriteEngine On
RewriteRule ^([^/]+)$ test.php?a=$1
RewriteRule ^([^/]+)/([^/]+)$ test.php?a=$1&b=$2
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ test.php?a=$1&b=$2&c=$3

test.php:
Code:
<?php

echo '<pre>'.print_r( $_GET, true ).'</pre>';

http://localhost/test/foo/gna/blubb
Code:
Array
(
    [a] => foo
    [b] => gna
    [c] => blubb
)
 
Hallo,
Danke für die Antworten. Leider bekomme ich beides nicht zum laufen.
Mit dem Code von wueste passiert (anscheinend) nichts und mit dem Code von Yuuri (den ich natürlich angepasst habe) passieren andere merkwürdige Dinge, z.B. werden die CSS Dateien nicht mehr richtig geladen, die sich im Unterordner css befinden.

Ich habe eben einfach mal das Beispiel von der Apache Referenz ausprobiert:
Code:
RewriteEngine on
 RewriteRule ^/old\.html$ /new.html [PT]
Ich habe eine old.html auf dem Server angelegt und diese aufgerufen -> in der Browserzeile war immernoch ../old.html sichtbar. Als ich new.html aufgerufen habe, habe ich einen 404 bekommen.

Irgendwie finde ich das jetzt komisch, da mod rewrite ja aktiviert ist (die umleitung gegen duplicate-content funktioniert).

Oder habe ich da irgendwas völlig falsch verstanden?
Wenn ich eine Rewrite Rule erstelle sollten doch old.html und new.html aufrufbar sein (und in der Browserzeile new.html stehen) oder nicht?

MfG
M.E.
 
Zuletzt bearbeitet:
M.E. schrieb:
Mit dem Code von wueste passiert (anscheinend) nichts und mit dem Code von Yuuri (den ich natürlich angepasst habe) passieren andere merkwürdige Dinge, z.B. werden die CSS Dateien nicht mehr richtig geladen, die sich im Unterordner css befinden.
Dafür musst du dann Conditionals nutzen: http://www.easymodrewrite.com/guide-advanced
Code:
RewriteCond %{SCRIPT_FILENAME} !-f // nur umschreiben, wenn Ziel nicht als Datei existiert
RewriteCond %{SCRIPT_FILENAME} !-d // nur umschreiben, wenn Ziel nicht als Verzeichnis existiert
 
Hallo,
Ich habe jetzt nochmal ein wenig herumprobiert, aber irgendetwas scheint nicht zu stimmen.
Mein .htaccess sieht folgendermaßen aus:
Code:
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^wallpaperdb\.de [NC]
RewriteRule (.*) http://www.wallpaperdb.de/$1 [R=301,L]

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d 

RewriteRule ^/Abstrakt/$ index.php?cat=Abstrakt [PT]
Ich weiß, dass Zeile 4 und 5 funktionieren. Das ist ja die normale Vorgehensweise gegen Duplicate Content. Ich lese daraus und aus den Servereinstellungen beim Hoster, dass mod_rewrite aktiviert ist.

Zeile 10 hat allerdings keinerlei Auswirkungen, wenn ich die entsprechende Kategorie öffne:
http://www.wallpaperdb.de/index.php?cat=Abstrakt

http://www.wallpaperdb.de/Abstrakt/ funktioniert nicht und der obere Link wird auch nicht automatisch umgewandelt. Das Ziel exisitert auch nicht als Verzeichnis.

Ich habe schon probiert, ob es evtl an der RewriteBase liegt, da die Domain die zweite Domain auf meinem Webspace ist und in einem Unterordner der Hauptdomain liegt. Das hat das Problem aber leider auch nicht gelöst.

Ich habe es jetzt so simpel wie möglich gehalten, aber sehe den Fehler selber leider nicht. Stimmt der Ausdruck in Zeile 10 überhaupt?

MfG
M.E.
 
Zuletzt bearbeitet:
keiner eine Idee?
Ergänzung ()

Ich habe es jetzt nach einigem herumprobieren doch selber hinbekommen.
Danke für die Hilfe und die Links, da habe ich mich jetzt nochmal durchgebissen.

Eine Sache allerdings funktioniert noch nicht mit mod_rewrite.
Und zwar die Suche:

Das HTML Form
Code:
<form name="search" action="http://www.wallpaperdb.de/index.php" method="get">
 Suchbegriff(e):<br>
 <input type="hidden" name ="site" value = "search" /> <!-- Hidden Value um bei der Suche zu bleiben -->
 <input type="text" name="keys"  size="60" maxlength=60 /> &nbsp; <input type="submit" value="Suchen" />
</form>

Dieses Form erzeugt mir URLs mit folgender Syntax:
.../index.php?site=search&keys=Suchbegriffe jeder Art

Wie kann ich dafür sorgen, dass mir das Form URLs produziert, die so aussehen:
.../Search/Suchbegriffe jeder Art/

Was ich dazu in der .htaccess machen muss ist mir jetzt klar und wenn ich manuell so eine URL eintippe klappt auch alles, aber wie bringe ich das HTML Form dazu URLs so zu erzeugen?

MfG
 
Zuletzt bearbeitet:
Zurück
Oben