Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

Einfacher Regex macht Probleme mit %2F vs /

Mehrere Domains, Domain-Umzug, neue Dateinamen, 301/302
Neues Thema Antworten
Anonymous

Beitrag von Anonymous » 22.09.2010, 23:40

Hi,
Ich habe einen sehr simplen Regex:

RewriteRule ^item/(.+)$ index.php?action=listitems&which=$1 [L]

Das funktioniert auch ganz gut für URLs à la "item/Foo" oder auch "item/Foo & Bar". Problematisch wird es mit dem Slash. Die URLs werden in einem PHP-Skript generiert, also habe ich urlencode() verwendet, sodass am Schluss etwas wie <a href="item/Foo%2FBar"> rauskommt. Seltsamerweise funktioniert der Regex in genau diesem Fall nicht! In diesem Fall bekomme ich die Standard-404-Meldung des Apache-Servers angezeigt. Es sind auch keine weiteren Ausdrücke in der Datei. Erst wenn ich in PHP das urlencode() rausnehme, also Links à la <a href="item/Foo/Bar"> generiere, funktioniert der Ausdruck wieder und die gewünschte Webseite wird angezeigt. Woran kann das liegen?

Anzeige von ABAKUS

von Anzeige von ABAKUS »


Hochwertiger Linkaufbau bei ABAKUS:
  • Google-konformer Linkaufbau
  • nachhaltiges Ranking
  • Linkbuilding Angebote zu fairen Preisen
  • internationale Backlinks
Wir bieten Beratung und Umsetzung.
Jetzt anfragen: 0511 / 300325-0

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 23.09.2010, 07:58

Ehrlich gesagt mag ich Fragen zu den Rules, aber hier habe ich nun auch keine passende Antwort.

Ich kann Dir nur sagen, dass mod_rewrite keine Probleme mit den %2F oder den anderen Zeichen-Codierungen hat, die verwende ich selber auf meinen Seiten.

Ich würde daher viel eher darauf tippen, dass PHP bzw. die index.php irgendwo den Fehler verursacht, eventuell weiterleitet und dann der Apache die Standard-Fehlerseite auswirft. Sind aber nur Vermutungen...

Kann man sich das mal live ansehen?

Anonymous

Beitrag von Anonymous » 23.09.2010, 11:48

Synonym hat geschrieben:Ich kann Dir nur sagen, dass mod_rewrite keine Probleme mit den %2F oder den anderen Zeichen-Codierungen hat, die verwende ich selber auf meinen Seiten.
Hmm. Und ich hab das Problem gleich zwei Mal auf zwei Systemen... (Debian-Server und Windows-Entwicklungssystem)
Synonym hat geschrieben:Ich würde daher viel eher darauf tippen, dass PHP bzw. die index.php irgendwo den Fehler verursacht, eventuell weiterleitet und dann der Apache die Standard-Fehlerseite auswirft. Sind aber nur Vermutungen...
Die index.php wird gar nicht erst aufgerufen. Selbst wenn ich da direkt oben ein die(); reinschreibe, bekomme ich noch 'nen 404er.

Ich hab hier mal ein sehr simples Testsystem, das bei mir reproduzierbar auf zwei Systemen sich falsch verhält (beide ohne großartige Modifikationen an der Konfiguration)...

test.htm (diese Datei Aufrufen):

Code: Alles auswählen

<ul>
<li><a href="item/Foo&Bar">Foo&amp;Bar</a></li>
<li><a href="item/Foo%26Bar">Foo%26Bar</a></li>
<li><a href="item/Foo/Bar">Foo/Bar</a></li>
<li><a href="item/Foo%2FBar">Foo%2FBar</a></li>
</ul>
.htaccess:

Code: Alles auswählen

RewriteEngine on
RewriteRule ^item/&#40;.+&#41;$ index.php?action=listitems&which=$1 &#91;L&#93;
index.php:

Code: Alles auswählen

<?php
print_r&#40;$_GET&#41;;
?>
Sonst ist in dem Ordner nichts drin.

Alle Links bis auf der letzte werden auch tatsächlich zur index.php umgeleitet. Wobei halt auch die ersten beiden nicht ganz wie erwartet Funktionieren, da wird Foo&Bar in zwei variablen (which=Foo und Bar=) aufgesplittet, was ich eigentlich auch durch urlencode() vermeiden wollte...

Edit: Ich habe in der .htacces mal noch das hier eingefügt:

Code: Alles auswählen

ErrorDocument 404 /index.php
Und auch jetzt kommt die Default-Fehlerseite vom Apache! Und wenn ich zusätzlich noch die RewriteRule auskommentiere, verwenden die ersten drei Testcases meine index.php als Fehlerseite, aber der vierte nach wie vor auch die Default-Fehlerseite.
Ich blicke da nicht durch. :o