RewriteCond
André Laugks
- webserver
Hallo!
Ich habe eine RewriteRule geschrieben, die folgende Aufageb hat:
Wenn eine URL in der Form http://www.domain.de/de/ aufgerufen wird, soll die erste RewriteRule arbeiten, was auch funktioniert.
Wenn eine URL in der Form http://www.domain.de/1234/ aufgerufen wird, soll ein Redirect ausgeführt werden und es wird die URL http://www.domain.de/de/1234/ aufgerufen.
Problem ist, ich komme nicht in die 2. RewriteRule. Die RewriteCond für die 2. RewriteRule stellt sich quer. wenn ich die RewriteCond entferne, gibt es ein DauerRedirect. Ich kann keinen Fehler sehen. Der reguläre Ausdruck passt, ist ja das selbe wie bei der 1. RewriteCond, nur mit Zahlen.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} ^/([a-z]{1,2})/?
RewriteRule ^([a-z]{1,2})/?([0-9]*)/?([0-9]*)/?(&(.*))?$ /index.php?lang_alias=$1&id_structure=$2&id_obj=$3¶ms=$4 [QSA]
RewriteCond %{REQUEST_FILENAME} ^/([0-9]+)/?
RewriteRule ^(.*)$ /de/$1 [R=301]
André Laugks
Hallo André,
Problem ist, ich komme nicht in die 2. RewriteRule. Die RewriteCond für die 2. RewriteRule stellt sich quer. wenn ich die RewriteCond entferne, gibt es ein DauerRedirect. Ich kann keinen Fehler sehen. Der reguläre Ausdruck passt, ist ja das selbe wie bei der 1. RewriteCond, nur mit Zahlen.
Du fragst in beiden Fällen die falsche Variable ab - in REQUEST_URI steht das richtige, in REQUEST_FILENAME steht der Dateiname wie er auf der Festplatte wäre (unabhängig davon ob die Datei existiert oder nicht), nachdem der URI auf die Festplatte gemappt wurde. Dass das erste Funktioniert, liegt nur daran, dass /srv/... oder /var/... oder wo Deine Dateien auch liegen auf Deinen regulären Ausdruck mappen - d.h. die erste RewriteCond ist *immer* true.
Viele Grüße,
Christian
Hallo!
Du fragst in beiden Fällen die falsche Variable ab - in REQUEST_URI steht das richtige, [...]
Jetzt wo Du es schreibst...! ;-(
Danke!
André Laugks
Wenn ich Dich richtig verstehe, geht es in der zweite Regel nur um "Pfade", deren erstes "Verzeichnis" nur aus Zahlen besteht. In diesem Fall bräuchtest Du gar keine RewriteCond, sondern könntest es so machen:
RewriteRule ^([0-9]+/*.*)$ $1
Probier es mal aus, ist nur aus dem Stegreif ausgedacht.
Es muss natürlich so heißen:
RewriteRule ^([0-9]+/*.*)$ de/$1