0

Я пытаюсь сделать поддомены Rewrite для подкаталогов на htaccess. Поиск здесь я ниже правило:Как перенаправить субдомен в подкаталог (с папкой по умолчанию) на htaccess без адреса изменения

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^(www)\. [NC] 
RewriteCond %{HTTP_HOST} ^(.+)\.domain\.com\.br 
RewriteCond %{REQUEST_URI} !^/sd_ 
RewriteRule ^(.*)$ http://domain.com.br/sd_%1/$1 [P,L,NC,QSA] 

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^www.(.*)\.domain\.com\.br 
RewriteCond %{REQUEST_URI} !^/sd_ 
RewriteRule ^(.*)$ http://domain.com.br/sd_%1/$1 [P,L,NC,QSA] 

#Rewrite for my Framework 
RewriteEngine On 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?url=$1 

Когда я получить доступ к адресу: http://user.domain.com.br или адрес: http://www.user.domain.com.br они перенаправляются без изменения адреса URL для: http://www.domain.com.br/sd_user/

Ну, хорошо. Моя проблема:
Когда кто-то получает доступ к объявлениям, у которых нет папки, .htaccess перенаправляет ее в определенную папку. Например:
У меня нет папки под названием «sd_joecompany», затем я хочу перенаправить ее в папку по умолчанию «sd_system». Если я получаю доступ к http://joecompany.domain.com.br/ и не существует соответствующей папки, этот адрес может указывать на «sd_system», сохраняющий адрес.

С помощью этого кода, когда доступ субдомен без соответствующей папки, появляется следующее сообщение об ошибке:

Proxy Error

Прокси-сервер получил недопустимый ответ от вышестоящего сервера. Прокси-сервер не смог обработать запрос GET /index.php.

Причина: Макс. Форвард достиг нулевого уровня - прокси-петля?

Я не уверен в ясности своих сомнений, и я сожалею о своем бедном английском. Я знаю немного о .htaccess и этих правилах. Опираясь на приведенный выше код, я собрался здесь!

Спасибо, с настоящего момента!

+0

Является ли 'user.domain.com.br' и' www.domain.com.br' на одном сервере и использует тот же самый корень документа? –

+0

Да! На том же сервере и тот же корень. Я добавил на сервер правило DNS для перенаправления всех trafic (звездочек) .domain.com.br и www. (Asterisk) .domain.com.br на IP domain.com.br –

+0

Затем без правила, весь трафик поддоменов перенаправляется на корень domain.com.br –

ответ

2

Если они находятся на одном сервере и имеют один и тот же корень документа, то вы действительно не хотите прокси-сервера вообще. Удалить принимающую часть правила и избавиться от «P»:

RewriteEngine On 

RewriteCond %{REQUEST_URI} !^/sd_ 
RewriteCond %{HTTP_HOST} !^(www)\. [NC] 
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com\.br$ [NC] 
RewriteCond %{DOCUMENT_ROOT}/sd_%1%{REQUEST_URI} -f [OR] 
RewriteCond %{DOCUMENT_ROOT}/sd_%1%{REQUEST_URI} -d 
RewriteRule ^(.*)$ /sd_%1/$1 [L,NC,QSA] 

RewriteCond %{REQUEST_URI} !^/sd_ 
RewriteCond %{HTTP_HOST} ^www\.([^.]+)\.domain\.com\.br$ [NC] 
RewriteCond %{DOCUMENT_ROOT}/sd_%1%{REQUEST_URI} -f [OR] 
RewriteCond %{DOCUMENT_ROOT}/sd_%1%{REQUEST_URI} -d 
RewriteRule ^(.*)$ /sd_%1/$1 [L,NC,QSA] 

#Rewrite for my Framework 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?url=$1 

Подчищен некоторые из регулярных выражений и избавившись от лишних RewriteEngine On лет.

+0

Не работает для субдоменов без каталогов для них. «Внутренняя ошибка сервера Сервер обнаружил внутреннюю ошибку или неправильную конфигурацию и не смог выполнить ваш запрос. Кроме того, при попытке использовать ErrorDocument для обработки запроса была обнаружена ошибка 500 Internal Server Error». Для доступа по умолчанию и для поддоменов с папкой (sd_subdomain) это нормально. –

+0

@ KálimanBorges, когда я помещаю эти правила в пустой htaccess, я могу получить доступ к http: // user.domain.com.br/'просто отлично (вызывает'/sd_user/index.php'). –

+0

Потому что существует папка «sd_user» на вашем корне, правильно? Если вы попытаетесь получить доступ к 'http: // otheruser.domain.com.br /', появится ошибка. –