Page 1 of 1
Rewrite Problem
Posted: 2012-07-04 12:56
by amiga1200
Hallo,
ich habe ein Problem mit Rewrite in der htaccess
Ziel ist es, das ich in der URL schreiben kann.
http://www.meinexxx.de/deutschland
http://www.meinexxx.de/deutschland/kiel # bis zur 5 Parameter, .php als endung soll egal sein
im Quellcode arbeite ich mit base, damit die Relative Pathe stimmen.
Für jede Parameter Kombination habe ich eine Rewrite-Zeile
Gebe ich 2 Paramter an:
http://www.meinexxx.de/deutschland/kiel
würde Zeile 4 Greifen, mit 3 Parameter Zeile 3...
Das Funktioniert auch alles bis auf Zeile 5, die für 1 Parameter zuständig ist,
sobald ich die setze, gilt die Zeile für alle Kombination. und die Get Parameter werden nicht übergeben!
Code: Select all
RewriteRule ^([^/]+)/([^./]+)/([^./]+)/([^./]+)/([^./]+)/index.php?a1=$1&a2=$2&a3=$3&a4=$4&a5=$5&ac=5 [L]
RewriteRule ^([^/]+)/([^./]+)/([^./]+)/([^./]+)/?$ index.php?a1=$1&a2=$2&a3=$3&a4=$4&ac=4 [L]
RewriteRule ^([^/]+)/([^./]+)/([^./]+)/?$ index.php?a1=$1&a2=$2&a3=$3&ac=3 [L] # für 3 Paramter
RewriteRule ^([^/]+)/([^./]+)/?$ index.php?a1=$1&a2=$2&ac=2 [L] # für 2 Paramter
#RewriteRule ^([^/]+)/?$ index.php?a1=$1&ac=1 [L] # für 1 Parameter sobald aktiv, sind andere wirkungslos
Eine Notlösung wäre natürlich, man holt die Parameter mit
$_SERVER["REQUEST_URI"] über php, und nicht über die htaccess.
Vielleicht gibt es auch eine einfache Lösung?
Re: Rewrite Problem
Posted: 2012-07-04 14:08
by Joe User
Aktuell sind Deine RegEx eher unglücklich gewählt.
Welche Zeichen dürfen denn überhaupt in den Parametern enthalten sein?
Buchstaben, Zahlen, Sonderzeichen?
Re: Rewrite Problem
Posted: 2012-07-04 14:50
by amiga1200
Die Rewrite habe ich im Netz gefunden.
Welche Zeichen dürfen denn überhaupt in den Parametern enthalten sein?
das sind halt normale übergabe Werte:
/kiel/haus/b-12/fra_de
also normale Zeichen, umlaute werden über php rausgesiebt
Das funktioniert auch so, bis auf die letzte Zeile!
Re: Rewrite Problem
Posted: 2012-07-04 17:06
by Joe User
Etwas länger, dafür präziser:
Code: Select all
RewriteRule ^([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/?$ index.php?a1=$1&a2=$2&a3=$3&a4=$4&a5=$5&ac=5 [L]
RewriteRule ^([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/?$ index.php?a1=$1&a2=$2&a3=$3&a4=$4&ac=4 [L]
RewriteRule ^([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/?$ index.php?a1=$1&a2=$2&a3=$3&ac=3 [L]
RewriteRule ^([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/?$ index.php?a1=$1&a2=$2&ac=2 [L]
RewriteRule ^([a-zA-Z0-9\-_]+)/?$ index.php?a1=$1&ac=1 [L]
Wenn das nicht hilft, dann bitte mal das Rewritelog auf debug mitlaufen lassen.
Re: Rewrite Problem
Posted: 2012-07-04 20:58
by amiga1200
Hi
Vielen Dank, das sieht schon viel besser aus.
schreibe ich /kiel/test ist alles gut.
ich wünche mir aber /kiel/test.php
und es sollte kein unterschied sein, ob mit .php oder ohne.
Geht das auch über ein Rewrite?
wie installiert man ein Rewrite-Log?
Re: Rewrite Problem
Posted: 2012-07-04 21:34
by Joe User
So sollten auch Fileextensions für das letzte Element erfasst sein:
Code: Select all
RewriteRule ^([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)(/|\.[a-zA-Z]+)?$ index.php?a1=$1&a2=$2&a3=$3&a4=$4&a5=$5&ac=5 [L]
RewriteRule ^([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)(/|\.[a-zA-Z]+)?$ index.php?a1=$1&a2=$2&a3=$3&a4=$4&ac=4 [L]
RewriteRule ^([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)(/|\.[a-zA-Z]+)?$ index.php?a1=$1&a2=$2&a3=$3&ac=3 [L]
RewriteRule ^([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)(/|\.[a-zA-Z]+)?$ index.php?a1=$1&a2=$2&ac=2 [L]
RewriteRule ^([a-zA-Z0-9\-_]+)(/|\.[a-zA-Z]+)?$ index.php?a1=$1&ac=1 [L]
RewriteLog:
http://httpd.apache.org/docs/2.2/mod/mo ... rewritelog
Re: Rewrite Problem
Posted: 2012-07-05 07:50
by amiga1200
Ich dachte schon, ic hätte es!
Schreibe ich die Rewrite für 2 Paramter ist alles gut
/sommer/test # auch mit .php
RewriteRule ^([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)(/|\.[a-zA-Z]+)?$ index.php?a1=$1&a2=$2&ac=2 [L]
Sobald ich die Rewrite für 1 Parameter dazu setze,
RewriteRule ^([a-zA-Z0-9\-_]+)(/|\.[a-zA-Z]+)?$ index.php?a1=$1&ac=1 [L]
findert Apache meine css Datei nicht mehr, alle Bilder werden aber normal gefunden.
bei /sommer bekomme ich als a1 Wert index raus, so heiß meine index Datei!
Diese Zeile hat vorrang, sobald die aktiv ist, werden alle anderen Regeln
ignoriert, das habe ich auf 2 Servern getestet.
Ich weiß gerade nicht weiter.
Re: Rewrite Problem
Posted: 2012-07-05 12:26
by Joe User
Dachte ich mir schon, da brauchst Du noch eine RewriteCond mit den Ausnahmen.
Wenn Du es nicht selbst hinbekommst, dann versuche ich es heute Abend nochmal.
Re: Rewrite Problem
Posted: 2012-07-06 09:20
by amiga1200
Vielen Dank für Dein Angebot
Mit RewriteCond habe ich mir nun auch etwas befasst.
Ist es eigentlich so, das die RewriteCond
nur für die drauf folgende RewriteRule Regel gilt?
Zurzeit bin ich bei:
#RewriteCond %{REQUEST_URI} !^/(medien)
#4 er
RewriteRule ^([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)(/|\.[a-zA-Z]+)?$ index.php?a1=$1&a2=$2&a3=$3&ac=3 [L]
#3 er
RewriteCond %{REQUEST_URI} !^/(medien)
RewriteRule ^([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)(/|\.[a-zA-Z]+)?$ index.php?a1=$1&a2=$2&a3=$3&ac=3 [L]
#2 er
RewriteCond %{REQUEST_URI} !^/(css)
RewriteRule ^([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)(/|\.[a-zA-Z]+)?$ index.php?a1=$1&a2=$2&ac=2 [L]
#1 er
RewriteRule ^([a-zA-Z0-9\-_]+)(/|\.[a-zA-Z]+)?$ index.php?a1=$1&ac=1 [L]
Damit lassen sich alle Kombinationen ableiten, also /a/b/c/d und als Endung .php oder / ist egal.
Doch obwohl die Rewrite_Cond benötigt werden, zieht im grund nur die 1 er Regel.
also alle laufen zur Zeile 1, daher sind die Übergabe werte natürlich weg.
Sollte Du auch keine Lösung haben, ziehe ich die Werte einfach über PHP mit $_SERVER["REQUEST_URI"] und splite sie.
oder siehst Du ein Problem, was ich nicht sehe?
viele Grüße aus Hamburg
Re: Rewrite Problem
Posted: 2012-07-06 12:25
by Joe User
Wenn Du es so machst, dann werden nur die "virtuellen" Pfade umgeschrieben, aber alle real existierenden Dateien und Ordner nicht:
Code: Select all
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)(/|\.[a-zA-Z]+)?$ index.php?a1=$1&a2=$2&a3=$3&a4=$4&a5=$5&ac=5 [L]
RewriteRule ^([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)(/|\.[a-zA-Z]+)?$ index.php?a1=$1&a2=$2&a3=$3&a4=$4&ac=4 [L]
RewriteRule ^([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)(/|\.[a-zA-Z]+)?$ index.php?a1=$1&a2=$2&a3=$3&ac=3 [L]
RewriteRule ^([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)(/|\.[a-zA-Z]+)?$ index.php?a1=$1&a2=$2&ac=2 [L]
RewriteRule ^([a-zA-Z0-9\-_]+)(/|\.[a-zA-Z]+)?$ index.php?a1=$1&ac=1 [L]
domain.tld/existiert/nicht/als/datei
wird umgeschrieben zu
domain.tld/index.php?a1=existiert&a2=nicht&a3=als&a4=datei&ac=4
domain.tld/existiert/als/reale/datei
bleibt so erhalten und wird nicht umgeschrieben
Hoffe es passt jetzt.