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.