Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Администрирование Web серверов и Web служб > ModRewrite. Подмена директории в завис. от хоста


Автор: ImamMahdi 20.3.2009, 15:17
Не могу решить поставленную задачу, казолось бы, весьма простую.

Имеется директория с шаблонами, допустим, templates. В ней вложенные дирекории, имена которых являются именами алиасов

То есть:

/templates/example1.com/index.html (example1.com)
/templates/example2.com/index.html (example2.com)
/templates/example3.com/index.html (example3.com)

Неоходимо, в зависимости от имени хоста, отдавать нужный файл index.html, при этом имея адрес файла вида /templates/index.html. Крайне желательно, чтобы допустимые хосты не были предопределены (не задавались явно).

Автор: DSsupport 20.3.2009, 21:05
Каким образом Вы пытались решить эту задачу? Приведите пожалуйста пример правил составленных Вами.

Автор: ImamMahdi 23.3.2009, 18:42
Да вот в том-то и дело, что я не знаю как правильно задействовать %{HTTP_HOST} в правилах, чтобы добиться желаемого результата...

Автор: DSsupport 23.3.2009, 20:31
Примеры использования %{HTTP_HOST} можно найти в этом форуме http://forum.vingrad.ru/forum/topic-250463.html

Обязательно прочтите http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html, либо наймите специалиста, и он решит Вашу проблему.

Автор: ImamMahdi 24.3.2009, 12:07
Подобные примеры использования %{HTTP_HOST} я уже видел в изобилии, но мне нужно нечто другое

Мне бы правило, вида (это просто возможный пример. На правильность синтаксиса и т.п не претендую):

Код

RewriteRule ^(/~.+)$ /%{HTTP_HOST}/dir1/dir2/$1 [R,L]


Но, судя по всему, переменная %{HTTP_HOST} таким образом не обрабатывается...

Цитата

документацию по mod_rewrite, либо наймите специалиста, и он решит Вашу проблему.

Документацию чител, но на углубленное ее изучение, в данный момент, времени нет. Было бы, я бы и на форум тогда не полез. Что касается найма специалиста... это конечно хороший вариант, но согласитесь, я и сам мог до него догадаться и если бы была такая возможность, стал бы я тревожить своими вопросами обитателей форма? smile

Автор: DSsupport 24.3.2009, 14:50
Попробуйте таким образом:
Код

RewriteEngine On 
RewriteRule ^/(.*)$ /templates/%{HTTP_HOST}/$1


Но в идеале иметь для каждого домена свой виртуальный хост.

Автор: ImamMahdi 24.3.2009, 17:03
Большое спасибо, попробую. Хотя подобные конструкции испытывал и результата не добился...

Автор: DSsupport 24.3.2009, 17:30
Убедитесь, что директивы Mod Rewrite выполняется, т.е. подключается .htaccess (если rewrite rules записаны в нем) и правильно описан виртуальный хост.

Автор: ImamMahdi 25.3.2009, 11:57
.htaccess подключается, так как другие правила срабатывают. Виртуальный хост тоже описан правильно, как мне кажется. (Тесты провожу на денвере 3)

Вот мой .htaccess

Код

AddDefaultCharset utf-8
RewriteEngine on
RewriteRule ^/(.*)$ /test/%{HTTP_HOST}/$1
#RewriteBase /
#RewriteRule ^([a-z0-9]+)(\/)?([a-z0-9]+)?$ /index\.php\?__p=$1&__op=$3 [L,QSA]


Закомментировано то, что к текущим тестам не имеет отношения. 

Соответственно есть директория $root/test/test.loc/image.png
Обращаюсь test.loc/image.png

Спасибо за помощь, извините, что время отнимаю

Автор: DSsupport 25.3.2009, 20:55
Подключите debug для Rewrite и покажите лог mod_rewrite при вызове через браузер http://test.loc/image.png .

Добавьте в виртуальный хост эти строки и уберите их из .htaccess:
Код

<VirtualHost test.loc>

...

AddDefaultCharset utf-8
RewriteEngine on
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 9 
RewriteRule ^/(.*)$ /test/%{HTTP_HOST}/$1
</VirtualHost>


К сожалению директивы RewriteLog и RewriteLogLevel  http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteLog

Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)