Помогите разобраться с mod_rewrite

Solmyr
На сайте с 10.09.2007
Offline
501
475

Проблема в том, что любое RewriteRule если запрос шел к поддомену dd.site.com бросает редирект на основной домен site.com

Началось это после того, как прописали правильный rhost для IP на котором сервер - когда там была абракадабра mod_rewrite работал правильно, а когда там прописали site.com стало вести себя вот так.

Куда копать? Debian 6 Apache 2.2.16

Rulin
На сайте с 16.01.2008
Offline
143
#1

Телепаты в отпуске... :)

Выкладывайте конфиги все что есть, как минимум конфиг виртуальногого хоста, и .htaccess.

Nginx случаем поверх апач не бежит?

Bitcoin Debit Card
izbushka
На сайте с 08.06.2007
Offline
110
#2
Solmyr:
как прописали правильный rhost для IP на котором сервер

Что такое rhost? Обратная DNS запись? Она никакого отношения к апачу и его rewriteRules не имеет.

Показывайте правила.

Solmyr
На сайте с 10.09.2007
Offline
501
#3

Конфиг:


DocumentRoot "/var/www/site.com"
<Directory "/var/www/site.com">
allow from all
Options +Indexes
</Directory>
ServerAlias *.site.com
UseCanonicalName off
HostNameLookups off

.htaccess


<IfModule mod_rewrite.c>
RewriteEngine on

RewriteRule ^a$ b [L]

</IfModule>
izbushka:
Что такое rhost? Обратная DNS запись? Она никакого отношения к апачу и его rewriteRules не имеет.

Походу имеет. Сервер узнает через нее "свое имя" и при выполнении любого правила, определяет что текущий хост отличатся от хоста в запросе, в результате чего дает внешний редирект. Такое поведение прописано в спецификации mod_rewrite.

Только не понятно как его отключить.

---------- Добавлено 16.11.2013 в 11:18 ----------

Кстати если написать в конфиге абракадабру:


ServerName eklfksrhgk.com

То все равно работает, и берет свое имя из обратной DNS записи.

----------

Проблема возникает именно при выполнении правила mod_rewrite. Если запрос идет к файлу, скажем:

http://subdomen.site.com/image.jpg

то никакого редиректа не происходит и отдается именно картинка с физическим адресом

/var/www/site.com/image.jpg

Именно такого поведения я и хочу, но с использованием директив mod_rewrite без бросания внешнего редиректа.

Solmyr
На сайте с 10.09.2007
Offline
501
#4

После экспериментов установил следующее.

Если в запросе Host: не совпадает ни с одним из ServerName прописанных в VirtaulHost'ах, то запрос передается тому VirtualHost'у у которого ServerName совпадет с тем что дает обратная DNS запись. При этом ServerAlias игнорируется. Сервер считает себя запущенным по адресу совпадающим с ServerName

А вот если обратная DNS запись не совпадает ни с одним из ServerName, то тогда учитываются ServerAlias'ы в VirtualHost'ах, сервер считает себя запущенным по адресу совпадающим с ServerAlias.

Буду курить документацию дальше. Моя проблема в том, что если обратная DNS запись совпадает с ServerName то игнорируется ServerAlias

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий