2016-04-24 5 views
2

Я пытаюсь сделать субдомен вперед через документ htaccess. Нижеследующие инструкции переадресуют http://sub.domain.com во внутреннюю структуру Root > subfolder > index.php. Все это хорошо работает.Как написать субдомен с 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 

Существует только одно (большое) падение с помощью этого метода. Когда вы пытаетесь добраться до папки в подпапке, такой как Root > subfolder > images, перейдя на http://sub.domain.com/images/, тогда все снова работает хорошо, однако, когда вы не закончите его косой чертой http://sub.domain.com/images, адрес в адресной строке станет http://sub.domain.com/subfolder/images/, что явно не что я хочу.

Так что, если бы я добавил косую черту, если бы была забыта косая черта?

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

Это все работает, когда у вас есть нормальный URL (http://www.domain.com/images), потому что он будет определять это каталог и добавляет косую черту, и если это файл будет опустить слэш. Однако это не работает для нашего примера http://sub.domain.com/images.

У кого-нибудь есть идея, как вы можете сделать субдомены правильно работать с помощью htaccess?

ответ

1

Это происходит потому, что /subfolder/images является реальным каталогом, а модуль mod_dir добавляет косые черты ко всем каталогам, выполняя 301 переадресацию.

Вы можете использовать его как это:

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]