Kann ich in .htaccess eine if / then / else?
-
22-07-2019 - |
Frage
Ich habe eine Website, die bestimmte Inhalte serviert auf der Basis der Sub-Domain. So ist es der gleiche Satz von Dateien, und vielleicht der Header und einige Informationen in den Site-Seiten Änderungen basierend auf dem Sub-Domain.
Ich brauche verschiedene htpassword Authentifizierung haben als auch auf der Basis der Sub-Domain, kann aber nicht Informationen finden, wie eine if / then Art der Sache in htaccess zu tun.
Im Grunde, was ich brauche, ist dies:
, wenn Sub-Domain = 'abc' Mit dieser htpassword Datei
, wenn Sub-Domain = 'def' Mit dieser htpassword Datei
Kann dies geschehen?
Lösung
Versuchen Sie etwas wie folgt aus:
SetEnvIf Host ^abc\. HOST_ABC
SetEnvIf Host ^dev\. HOST_DEF
<IfDefine HOST_ABC>
AuthUserFile …
</IfDefine>
<IfDefine HOST_DEF>
AuthUserFile …
</IfDefine>
Andere Tipps
welche Webserver verwenden Sie?
eine Technik, die auf verschiedenen Servern arbeiten können (es funktioniert sicher in Apache) ist eine andere .htaccess-Datei im Verzeichnis müssen jede Sub-Domain entsprechen.
Wenn es mir (und ich habe nicht gedacht, bevor zu tun) ich würde:
- Verwenden Sie einen internen Redirect mit mod_rewrite zu anderen Standort Wurzeln (/ suba oder / subb) in Abhängigkeit von einigen Faktoren (emuliert IF / ELSE)
- Mit Symlinks auf das öffentliche Verzeichnis, aber nicht die .htaccess
so:
/sites/subdomain_a/.htaccess
/sites/subdomain_a/pub
/sites/subdomain_b/.htaccess
/sites/subdomain_b/pub
Dabei steht
/sites/subdomain_a/pub == /sites/subdomain_b/pub
mit
ln -s
oder ähnliches. Dann mod_rewrite verwenden, um (intern) auf die rechte Seite root zu umleiten. I denken mod_rewrite ausgeführt wird, bevor .htaccess geladen wird.
Das heißt, Sie effektiv auf der Sub-Domain die gleichen Site-Dateien mit einer anderen .htaccess je verbüßen.
Hope, das hilft, bisschen wie ein Hack.
Möchten interessiert sein zu sehen, ob etwas besser existiert.
Sie können nicht, wenn / sonst verwenden, da .htaccess nicht eine Liste von Anweisungen. Aber, wenn Sie einen bedingten Block wie
Sie können auch stellen eine .htaccess-Datei eine Ebene über die Dateien und verwenden
so wäre dies das Verzeichnis über dem Web-Root (e):
.htaccess
sitefiles
subdomain1 (symbolischer Link zu sitefiles)
subdomain2 (symbolischer Link zu sitefiles)
...