Rewrite Problem

Apache, Lighttpd, nginx, Cherokee
amiga1200
Posts: 208
Joined: 2007-01-13 19:58

Rewrite Problem

Post by amiga1200 » 2012-07-04 12:56

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?

User avatar
Joe User
Project Manager
Project Manager
Posts: 11599
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Rewrite Problem

Post by Joe User » 2012-07-04 14:08

Aktuell sind Deine RegEx eher unglücklich gewählt.
Welche Zeichen dürfen denn überhaupt in den Parametern enthalten sein?
Buchstaben, Zahlen, Sonderzeichen?
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

amiga1200
Posts: 208
Joined: 2007-01-13 19:58

Re: Rewrite Problem

Post by amiga1200 » 2012-07-04 14:50

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!

User avatar
Joe User
Project Manager
Project Manager
Posts: 11599
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Rewrite Problem

Post by Joe User » 2012-07-04 17:06

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.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

amiga1200
Posts: 208
Joined: 2007-01-13 19:58

Re: Rewrite Problem

Post by amiga1200 » 2012-07-04 20:58

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?

User avatar
Joe User
Project Manager
Project Manager
Posts: 11599
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Rewrite Problem

Post by Joe User » 2012-07-04 21:34

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
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

amiga1200
Posts: 208
Joined: 2007-01-13 19:58

Re: Rewrite Problem

Post by amiga1200 » 2012-07-05 07:50

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.
Last edited by amiga1200 on 2012-07-05 09:34, edited 1 time in total.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11599
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Rewrite Problem

Post by Joe User » 2012-07-05 12:26

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.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

amiga1200
Posts: 208
Joined: 2007-01-13 19:58

Re: Rewrite Problem

Post by amiga1200 » 2012-07-06 09:20

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

User avatar
Joe User
Project Manager
Project Manager
Posts: 11599
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Rewrite Problem

Post by Joe User » 2012-07-06 12:25

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.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.