2016-01-09 3 views
1

Я использую службу хостинга, которая не поддерживает VirtualHost, возможно ли использовать mod_rewrite для сопоставления доменов в каталоги? Если кто-то обращается к домену1.com, я хочу, чтобы сервер возвращал файлы из каталога domain1. То есть собирается http://domain1.com/file.html/path/domain1/file.html.Использование mod_rewrite вместо VirtualHost

Вот что я пробовал:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(?:www\.)?domain1\.com$ [NC] 
RewriteRule (.*) /domain1$1 [L] 

RewriteCond %{HTTP_HOST} ^(?:www\.)?domain2\.com$ [NC] 
RewriteRule (.*) /domain2$1 [L] 

Это вызвало 500, но мой журнал ошибок не дает мне никакой полезной информации.

ответ

0

Вам необходимо проверить наличие /domain/ в REQUEST_URI перед тем, как маршрутизировать в тот же каталог, иначе ваше правило будет бесконечно кончиться в результате ошибки 500 ,

RewriteEngine on 

RewriteCond %{HTTP_HOST} ^(?:www\.)?domain1\.com$ [NC] 
RewriteRule ^((?!domain1/).*)$ domain1/$1 [L,NC] 

RewriteCond %{HTTP_HOST} ^(?:www\.)?domain2\.com$ [NC] 
RewriteRule ^((?!domain2/).*)$ domain2/$1 [L,NC] 
0

Не совсем. mod_rewrite запускается только после того, как веб-сервер уже выяснил, в какую директорию искать файлы - если еще нет какой-либо директивы виртуального хоста, указывающей, что домен в корне вашего документа, веб-сервер не будет смотреть на ваш файл .htaccess.

Возможно создание условий перезаписывания на основе HTTP_HOST (например, для принудительного использования определенного имени хоста, когда несколько имен хостов уже указывают на ваш сайт), но вы не можете использовать его для создания совершенно новых виртуальных хостов.

Что все сказано, эти директивы .htaccess обычно не должны вызывать ошибку 500. Возможно ли, что ваш хост вообще не поддерживает mod_rewrite? Если да, попросите их включить его или найдите другой веб-узел, который имеет его доступный. (Это действительно базовая стандартная функция, и не было бы это было бы смешно.)

Смежные вопросы