So definieren Sie Parameter / Konstanten in Apache-.htaccess-Dateien

819
Socob

Ich habe keinen Zugriff auf die Konfigurationsdateien des Apache-Servers und kann die Konfiguration nur über .htaccessDateien beeinflussen. Leider schränkt dies einige Dinge ein, die man vielleicht tun möchte. Der einfachste Weg, alle HTTP-Anforderungen an HTTPS umzuleiten, wäre beispielsweise:

<If "% != 'on'"> Redirect permanent / https://www.my-domain.com/ </If> 

Dies zwingt mich jedoch dazu, den Domänennamen fest zu codieren, sodass ich diese .htaccessDatei nicht ohne weiteres wiederverwenden kann. In meinem Fall kann auf die gleiche Site von mehreren verschiedenen Domains (mit nur einem darunter liegenden Dateisystem) aus zugegriffen werden, so dass dies für mich überhaupt keine Option ist. Ich kann dieses Problem nicht lösen, indem ich weitergeleitet werde an, https://%/da die RedirectAnweisung diese Art der Variablenersetzung nicht unterstützt ( außer in <Location>oder <LocationMatch>Abschnitten, aber diese stehen.htaccess natürlich nicht für Dateien zur Verfügung ).

Wenn ich also eine allgemeine / wiederverwendbare .htaccessKonfiguration haben möchte, muss ich die Verwendung von Servervariablen mod_rewriteanstelle von Redirectverwenden. Die entsprechende Lösung ist

RewriteCond % !=on RewriteRule ^ https://%% [R=permanent,L] 

Das ist schon wesentlich komplexer, ganz zu schweigen von möglichen Interaktionen mit anderen mod_rewriteRegeln, die ich vielleicht aufstellen möchte - vorzugsweise möchte ich es mod_rewritewegen seiner Komplexität auf ein Minimum beschränken.


Ein anderes Beispiel, für das ich überhaupt keine Problemumgehung gefunden habe, ist die mod_substitute, die %Erweiterungen überhaupt nicht unterstützt . Wenn sich meine Site in einem bestimmten Unterverzeichnis ( sub_dir) auf dem Server befindet und ich alle Links auf HTML-Seiten in diesem Verzeichnis nachbearbeiten möchte, kann ich dies tun

AddOutputFilterByType SUBSTITUTE text/html Substitute s~/sub_dir/[^\s]+/~/sub_dir/something_else/~ 

Hier muss ich das Verzeichnis hartcodieren sub_dir, das ich für jedes andere Unterverzeichnis ersetzen müsste, in dem ich die gleiche Ersetzung durchführen möchte (nein, ich habe keinen Zugriff auf die Root-URL /). Wenn dies eine Umschreibungsregel wäre, könnte ich einfach eine Umgebungsvariable %wie folgt definieren :

RewriteRule ^ - [E=site_dir:/sub_dir] 

Diese Umgebungsvariable nützt mir mod_substituteaber nichts, weil sie diese nicht interpretiert.


Gibt es eine Möglichkeit, das Festcodieren und Duplizieren von Domänen und Unterverzeichnissen wie diesem in Modulen wie mod_aliasoder zu vermeiden mod_substitute, die nicht die gleichen Mechanismen haben wie mod_rewrite? Zum Beispiel durch den Zugriff auf Umgebungsvariablen wie %in diesen Modulen?

1

0 Antworten auf die Frage