2016-05-09 3 views
1

Ich bin derzeit mit einem Endlosschleife Problem mit mod_rewrite stecken.Apache mod_rewrite - rewrite zu Ordnernamen basierend auf% {HTTP_HOST} - Endlosschleife

Was will ich (Regeln werden angewandt, um):

  • stript www (Redirect)
  • Schreibanforderung, damit die Dateien im Ordner mit dem Namen% {HTTP_HOST} (falls vorhanden) verwendet werden,
  • , wenn der Ordner nicht existiert, umleiten

Beispiele domain.tld:

  • www.subdomain.domain.tld => umleiten
  • subdomain.domain.tld => Ladedateien im Ordner mit dem Namen subdomain.domain.tld (und übergeben Sie den Rest der Anfrage) subdomain.domain.tld
  • unknown-subdomain.domain.tld => umleiten

domain.tld Was ich so weit gekommen:

RewriteEngine On 

# Store protocol (HTTP or HTTPS) as ENV variable 
RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' [OR] 
RewriteCond %{HTTPS} !=on 
RewriteRule ^(.*)$ - [env=proto:http] 
RewriteCond %{HTTP:CF-Visitor} '"scheme":"https"' [OR] 
RewriteCond %{HTTPS} =on 
RewriteRule ^(.*)$ - [env=proto:https] 

# Stript www 
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule^%{ENV:proto}://%1%{REQUEST_URI} [L,NC,QSA,R=301] 

# Directory exists => rewrite 
RewriteCond %{REQUEST_URI} !^/%{HTTP_HOST} [NC] 
RewriteCond %{HTTP_HOST} -d 
RewriteRule^%{HTTP_HOST}%{REQUEST_URI} [L,NC,QSA] 

# Directory doesn't exist => redirect 
RewriteCond %{REQUEST_URI} !^/%{HTTP_HOST} [NC] 
RewriteCond %{HTTP_HOST} !-d 
RewriteRule^%{ENV:proto}://domain.tld%{REQUEST_URI} [L,NC,QSA,R] 

ich weiß, das alles mit virtuellen Hosts erreicht werden kann. Leider bin ich bereits auf einem freigegebenen virtuellen Host und .htaccess ist alles, was ich nutzen kann, also bin ich irgendwie gezwungen, so zu gehen.

Ich bin dankbar für jede Hilfe oder Ideen, die mich in die richtige Richtung führen.

+0

Wo Sie für die Verzeichnisse suchen? Wenn alle Ihre Sub-Domains HTTPS unterstützen, leiten Sie Ihre Benutzer immer an eine SSL-Verbindung weiter. – hjpotter92

+0

Die Verzeichnisse befinden sich im selben Ordner wie der .htaccess. Der Erhalt des Protokolls ist eher eine Spielerei und weil es in der Entwicklungsumgebung nicht unterstützt wird. Sie haben absolut Recht, wenn möglich immer HTTPS zu verwenden, was in der endgültigen Version der Fall sein wird. –

+0

Was ist die Apache-Version? –

Antwort

1

this helps:

RewriteEngine On 
RewriteBase "/" 

RewriteCond %{HTTPS} !=on 
RewriteRule ^(.*)$ - [env=proto:http] 
RewriteCond %{HTTPS} =on 
RewriteRule ^(.*)$ - [env=proto:https] 

# Strip www 
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule^%{ENV:proto}://%1%{REQUEST_URI} [L,NC,QSA,R=301] 

#Prevent loop 
RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule^- [L] 

# Directory exists => rewrite 
RewriteCond %{DOCUMENT_ROOT}/%{HTTP_HOST} -d 
RewriteRule^/%{HTTP_HOST}%{REQUEST_URI} [L,NC,QSA] 

# Directory doesn't exist => redirect (but not if host=example.com) 
RewriteCond %{DOCUMENT_ROOT}/%{HTTP_HOST} !-d 
RewriteCond %{HTTP_HOST} !=example.com 
RewriteRule^%{ENV:proto}://example.com%{REQUEST_URI} [L,NC,QSA,R] 
+0

Das funktioniert wie ein Zauber! Vielen Dank! :) –