rephluX
Ensign
- Registriert
- Okt. 2007
- Beiträge
- 169
Ahoi Forum!
Irgendwie steh ich gerad auf dem Schlauch und finde den Fehler irgendwie nicht. In meiner PHP-Seite werden alle URLs, die auf .html oder .xml enden per mod_rewrite an eine index.php geleitet. Diese bekommt dann als Paramter die gewünschte Seite als Paramter übergeben. Also aus einem
/unternehmen/kontakt.html
wird dann
index.php?page=/unternehmen/kontakt.html
Soweit so gut. Klappt und läuft. Jetzt würd ich aber gern den URLs noch optional einen Parameter übergeben können:
/unternehmen/kontakt.html?foo=bar
Ich hab folgende .htaccess Datei:
Im RegEx Coach läuft der Ausdruck wunderbar, und alle Submachtes sind richtig befüllt. Wenn ich das ganze im Browser ausprobiere, dann geht lediglich
http://localhost/?foo=bar
und der Parameter foo wird auch korrekt an die index.php übergeben.
Allerdings gehts dann nicht mehr, wenn ich zusätzlich noch eine gewünschte Seite direkt aufrufe. Also z.B
http://localhost/index.html?foo=bar
http://localhost/unternehmen/kontakt.html?foo=bar
http://localhost/impressum.html?foo=bar
Die Aufrufe von mod_rewrite hab ich mal ins log schreiben lassen, und da kommt der optionale Paramter anscheinend gar nicht an:
Etwas stuzig macht mich hier die Zeile 4 und die doppelten Escape-Zeichen. Ist das nur die Zeile im Log so? Denn in der htaccess-Datei stehts definitv richtig drin.
Klar, ich könnte das ganze natürlich auch mit zwei Regulären Ausdrücken machen, aber ich würd gerad nur verstehen, wo der Fehler liegt
Danke für die Fehlerfindung!
Irgendwie steh ich gerad auf dem Schlauch und finde den Fehler irgendwie nicht. In meiner PHP-Seite werden alle URLs, die auf .html oder .xml enden per mod_rewrite an eine index.php geleitet. Diese bekommt dann als Paramter die gewünschte Seite als Paramter übergeben. Also aus einem
/unternehmen/kontakt.html
wird dann
index.php?page=/unternehmen/kontakt.html
Soweit so gut. Klappt und läuft. Jetzt würd ich aber gern den URLs noch optional einen Parameter übergeben können:
/unternehmen/kontakt.html?foo=bar
Ich hab folgende .htaccess Datei:
Code:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d [OR]
RewriteRule ^(.*).(html|xml)\??(([a-z]+)=([a-z0-9_\-]+))?$ index.php?page=/$1.$2&$4=$5 [L]
</IfModule>
Im RegEx Coach läuft der Ausdruck wunderbar, und alle Submachtes sind richtig befüllt. Wenn ich das ganze im Browser ausprobiere, dann geht lediglich
http://localhost/?foo=bar
und der Parameter foo wird auch korrekt an die index.php übergeben.
Allerdings gehts dann nicht mehr, wenn ich zusätzlich noch eine gewünschte Seite direkt aufrufe. Also z.B
http://localhost/index.html?foo=bar
http://localhost/unternehmen/kontakt.html?foo=bar
http://localhost/impressum.html?foo=bar
Die Aufrufe von mod_rewrite hab ich mal ins log schreiben lassen, und da kommt der optionale Paramter anscheinend gar nicht an:
Code:
(2) init rewrite engine with requested uri /index.html
(1) pass through /index.html
(3) [perdir /var/htdocs/] strip per-dir prefix: /var/htdocs/index.html -> index.html
(3) [perdir /var/htdocs/] applying pattern '^(.*).(html|xml)\\??(([a-z]+)=([a-z0-9_\\-]+))?$' to uri 'index.html'
(4) [perdir /var/htdocs/] RewriteCond: input='/var/htdocs/index.html' pattern='!-f' => matched
(4) [perdir /var/htdocs/] RewriteCond: input='/var/htdocs/index.html' pattern='!-d' => matched
(2) [perdir /var/htdocs/] rewrite 'index.html' -> 'index.php?page=/index.html&='
(3) split uri=index.php?page=/index.html&= -> uri=index.php, args=page=/index.html&=
Etwas stuzig macht mich hier die Zeile 4 und die doppelten Escape-Zeichen. Ist das nur die Zeile im Log so? Denn in der htaccess-Datei stehts definitv richtig drin.
Klar, ich könnte das ganze natürlich auch mit zwei Regulären Ausdrücken machen, aber ich würd gerad nur verstehen, wo der Fehler liegt

Danke für die Fehlerfindung!