Der Martin: Apache, JS parsen als PHP, Zugriff auf Parameter.

Beitrag lesen

Hallo,

Hierzu haette ich nochmal eine Frage.
Und zwar wuerde ich folgenden Code sehr gerne vereinfachen/reduzieren.

das bietet sich an. ;-)

URLs mit dem String /switch/ werden als virtual_locations bearbeitet

RewriteRule ^(en/switch).*$ RequestHandler.php?reqtype=virtual_location [QSA]
RewriteRule ^(de/switch).*$ RequestHandler.php?reqtype=virtual_location [QSA]

Wozu verwendest du hier die Klammern? Der Suchausdruck
  ^(en/switch).*$
bedeutet doch, dass der geklammerte Inhalt gespeichert wird, so dass er im Ersetzungs-Ausdruck als $1, $2, ... wieder verwendet werden kann. Das nutzt du aber gar nicht, also sind die Klammern in deinem Fall ohne Bedeutung.

Wie man sieht, ist das doppelt gemoppelt.

Ja. Du kannst zwei Dinge vereinfachen.
Erstens das Kürzel de oder en, das immer auftaucht:

ich dachte das waere in etwa so etwas wie ([de|en])

So ähnlich. Eckige Klammern bedeuten aber eine Zeichenklasse. Der Ausdruck [de|en] matcht also genau eines der in der Klammer stehenden Zeichen. Das ist nicht das, was du willst. Verwende stattdessen normale runde Klammern. In runden Klammern geht dann auch die alternative Angabe mehrerer Teilausdrücke mit dem | als ODER-Operator. Aus den beiden Zeilen

RewriteRule ^(en/switch).*$ RequestHandler.php?reqtype=virtual_location [QSA]
RewriteRule ^(de/switch).*$ RequestHandler.php?reqtype=virtual_location [QSA]

wird dann nur noch eine:

RewriteRule ^(en|de)/switch.*$ RequestHandler.php?reqtype=virtual_location [QSA]

Wobei ich mich in diesem Beispiel frage, wo die Information bleibt, die das Sprachkürzel transportiert. Sie fällt unter den Tisch. In deinem Originalcode aber auch schon - oder wie wertest du diese Information aus?

Des weiteren habe ich Probleme damit Resourcen, die sich lediglich durch einen Slash am Ende unterscheiden, identisch zu behandeln.

Das ist das zweite, was du vereinfachen kannst. Ein Fragezeichen hinter einem Zeichen im RegEx bedeutet: Das Zeichen kann vorkommen, muss aber nicht. Somit lassen sich diese Zeilen

RewriteRule ^(en/)$ RequestHandler.php?reqtype=index [QSA]
RewriteRule ^(en)$ RequestHandler.php?reqtype=index [QSA]

zu einer zusammenfassen:

RewriteRule ^(en)/?$ RequestHandler.php?reqtype=index [QSA]

Die Kombination der beiden Optimierungsmöglichkeiten bekommst du selbst hin ...

So long,
 Martin

--
Solange der Nagellack nicht trocken ist,
ist eine Frau praktisch wehrlos.
  (Burt Reynolds, US-Schauspieler)