Dienstag, 5. März 2013

mod-rewrite 500 Internal Serverfehler

Wenn man in der htaccess einen Fehler hat kommt es leicht zu einem Internal Serverfehler.

In meinem Fall war es ein überschüssiges Leerzeichen:

RewriteRule ^(.*)_(.*)_(.*).html$ datei.php ?v1=$1
statt:
RewriteRule ^(.*)_(.*)_(.*).html$ datei.php?v1=$1

Also immer gut aufpassen.

Freitag, 1. März 2013

Mod-Rewrite schneidet url ab

Es hatte mich einige Zeit gekostet heraus zufinden warum folgender Mod-Rewrite Befehl scheinbar nicht richtig arbeit:

RewriteRule ^(.*).html$ irgendwas.php?v1=$1

Wenn normale Zeichen gesendet wurden, funktioniert das prima aber sobald ein sonderzeichen ins spiel kam änderte sich das. Insbesondere durch das &-Zeichen.

Aus Bequemlichkeit habe ich die Begriffe alle HTML kodiert in er Datenbank gespeichert und so wandern diese dann auch in die Links wo sie urlcodiert ann so aussehen: M%26ouml%3Bbel+Lagerung

Grundsätzlich kein Problem  - für PHP aber schon. Da PHP anscheinend vor dem verarbeiten der GET - Parameter diese Decodiert. Was dazu führt das in PHP eine weitere  Variable angelegt wird:

VariableValue
_REQUEST["v1"]M
_REQUEST["ouml;bel_Lagerung_Wolfsheim_55578"]no value
_GET["v1"]M
_GET["ouml;bel_Lagerung_Wolfsheim_55578"]no value

Zunächst dachte ich MOD-Rewrite würde einen Fehler Produzieren aber es ist PHP!

Schaut man sich den Query String an wurde alles richtig übermittelt - aber ist decodiert(!):

_SERVER["QUERY_STRING"]                        v1=Möbel+Lagerung_Wolfsheim_55578

Ich nutze nun halt den Query String. Alternativ kann man auch alle &-Zeichen aus dem Link entfernen und später wieder einfügen.

Edit:

Die oben genannten infos findet man mit der funktion phpinfo() - der Fehler liegt also bei PHP nicht im mod_rewrite