2016-04-24 15 views
2

Ich versuche, eine Subdomain über das htaccess-Dokument weiterzuleiten. Die folgenden Anweisungen leiten http://sub.domain.com an die interne Struktur Root > subfolder > index.php weiter. Das alles funktioniert gut.Wie schreibe ich eine Subdomain mit htaccess?

# REWRITE DEFAULTS 
# ==================================================================================================== 
RewriteEngine On 
RewriteBase/

# SUBDOMAIN FORWARD 
# ==================================================================================================== 
RewriteCond %{HTTP_HOST} ^sub.domain.com$ 
RewriteRule ^(/)?$ subfolder/index.php [L] 

RewriteCond %{HTTP_HOST} ^sub.domain.com$ 
RewriteCond %{REQUEST_URI} !^/subfolder/ 
RewriteRule ^(.*)$ /subfolder/$1 

Es gibt nur einen (großen) Sturz mit dieser Methode. Wenn Sie versuchen, einen Ordner in dem Unterordner zu erreichen wie Root > subfolder > images von bis http://sub.domain.com/images/ gehen dann funktioniert alles wieder gut, jedoch, wenn Sie es http://sub.domain.com/subfolder/images/ mit einem Schrägstrich http://sub.domain.com/images die URL in der Adressleiste nicht am Ende werden, was eindeutig nicht ist was ich möchte.

Also was, wenn ich einen Schrägstrich hinzufügen würde, wenn ein Schrägstrich vergessen wurde?

RewriteCond %{HTTP_HOST} ^(.*).domain.com$ 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteCond %{REQUEST_FILENAME} !(.*)/$ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ http://%1.domain.com/$1/ [L,R=301] 

Dies alles funktioniert, wenn Sie eine normale URL haben (http://www.domain.com/images), weil sie es ist ein Verzeichnis erkennt und fügt einen Schrägstrich und wenn es eine Datei ist wird es den Schrägstrich weglassen. Dies funktioniert jedoch nicht für unser Beispiel http://sub.domain.com/images.

Hat jemand eine Idee, wie Sie mit htaccess Subdomains richtig arbeiten lassen?

Antwort

1

Das passiert, weil /subfolder/images ist ein echtes Verzeichnis und mod_dir Modul fügt einen nachgestellten Schrägstrich zu allen Verzeichnissen, indem Sie eine 301 Redirect.

Sie können es wie folgt verwenden:

RewriteEngine On 

# add a trailing slash if /subfolder/images is a directory 
RewriteCond %{HTTP_HOST} ^sub\.domain\.com$ [NC] 
RewriteCond %{DOCUMENT_ROOT}/subfolder/$1/ -d 
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,NE,R=302] 

RewriteCond %{HTTP_HOST} ^sub\.domain\.com$ [NC] 
RewriteCond %{REQUEST_URI} !^/subfolder/ 
RewriteRule ^(.*)$ /subfolder/$1 [L]