Hallo zusammen!
Ich knoble nun schon seit einiger Zeit an einem Problem mit einer in einer RewriteRule zu nutzenden Variablen und hoffe auf eure Hilfe.
Mein Ziel ist, die von diesem Code gezeigte Funktionalität zu erreichen (wenn er denn funktionieren würde - dazu gleich).
RewriteEngine On
RewriteRule .* - [E=PAGES_DIRECTORY:page/]
RewriteRule ^%{ENV:PAGES_DIRECTORY}.*$ index.php
Mir geht es vor allem darum, PAGES_DIRECTORY nur ein Mal - in der .htaccess - definieren zu müssen und bei einer Änderung am Wert auch nur in einer Datei eine Änderung vornehmen zu müssen und nicht auch noch im verarbeitenden PHP-Skript. Dies hatte ich gehoft erreichen zu können, indem ich $_SERVER['PAGES_DIRECTORY'] bzw. $_SERVER['REDIRECT_PAGES_DIRECTORY'] verwende.
So viel zu dem, was ich gerne erreichen würde - nun zu den Problemen dabei:
Leider sind im Pattern einer RewriteRule keine Variablen erlaubt, weshalb mein Code oben nicht funktioniert (getestet mit Apache 2.2, "funktioniert nicht" heißt hier, dass nicht auf index.php weitergeleitet wird). Gleiches gilt leider für das CondPattern von RewriteCond, wo ebenfalls keine Variablen verwendet werden können.
Als Alternative hatte ich zunächst an Folgendes gedacht:
RewriteRule ^(page/).*$ index.php [E=PAGES_DIRECTORY:$1]
Und tatsächlich, das funktionniert wie gewünscht. Zwar hätte ich PAGES_DIRECTORY lieber "offensichtlicher" mit SetEnv oder [E=PAGES_DIRECTORY:page/] definiert, doch immerhin muss ich es so nur an einer Stelle tun.
Allerdings gibt es immernoch ein Problem: der Fall eines Requests auf / oder /index.php. In beiden Fällen greift meine RewriteRule nicht und die Variable wird daher natürlich auch nicht definiert. Und hier weiß ich leider nichtmehr weiter. Klar, ich könnte zusätzlich
RewriteRule .* - [E=PAGES_DIRECTORY:page/]
verwenden, aber dann bin ich ja wieder genau in der Situation, die ich vermeiden wollte: mehrere Stellen, an denen ich den Variableninhalt festlegen muss.
Nicht, dass ihr mich für furchtbar faul haltet - natürlich ist das kein besonders großer Aufwand und wäre ansich auch kein Problem. Aber ich bin auf der Suche nach einer sauberen Lösung und kann bisher einfach nicht akzeptieren, dass es keine bessere gibt, als an mehreren Stellen das gleiche von Hand zu schreiben …
Ich hoffe, verständlich erklärt zu haben, was ich erreichen möchte (und warum) und wo das Problem liegt. Danke schonmal für alle geisteserhellenden Antworten!
Viele Grüße,
Claudius