2013-10-10 4 views
1

Недавно я обновил свой сервер Apache с 2.0 до 2.2.24, но у меня проблема с RedirectMatch.Проблема с Apache RedirectMatch с относительным путем

Мой старый RedirectMatch директивы:

RedirectMatch ^/abc/abcd /otherurl/someaction 

В Apache 2.0, если мы будем использовать HTTPS для доступа, например. https://www.example.com/abc/abcd, он будет перенаправлен на https://www.example.com/otherurl/someaction.

Но в apache 2.2.24 он возвращает http://www.example.com/otherurl/someaction (HTTP, а не HTTPS) - кажется, Apache изменил схему запроса.

Если я проверяю HTTP-ответ на http watch, я нахожу разницу между 2.0 и 2.2.24.

Под Apache 2.0 заголовок ответа HTTP /otherurl/someaction - относительный URL-адрес пути.

Но на Apache 2.2.24 заголовок Location - http://www.example.com/otherurl/someaction - полный абсолютный URL.

Есть идеи по этой проблеме?

+0

Не могли бы вы добавить всю свою конфигурацию вокруг 'RedirectMatch'? Если я правильно понял вашу проблему, вы пропустили часть SSL, когда была сделана переадресация? – Qben

+0

Возможно, ваш сайт 'https' не включен в Apache 2.2, что делает сайт' http' по умолчанию одним из них? – Qben

+0

FWIW под Apache 2.0 абсолютный целевой URL строго необходим, так как Apache не будет «исправлять» целевой URL (т. Е. Значение заголовка ответа HTTP «Location») абсолютным (это было изменено в Apache 2.2.6). Если Apache не делает целевой URL абсолютным, это зависит от пользовательского агента для разрешения URL. В [RFC 2616] (https://tools.ietf.org/html/rfc2616#page-135) (теперь заменяется [RFC 7321] (https://tools.ietf.org/html/rfc7231#section-7.1 .2) было указано, что заголовок «Location» должен быть абсолютным, поэтому некоторые «старые» пользовательские агенты могут не принимать относительный URL. – MrWhite

ответ

0

Я думаю, что ваша проблема в том, что Redirect изменен с 2.0 на 2.2 (.6). И согласно документации:

Старый URL-путь - это чувствительный к регистру (% -декодированный) путь, начинающийся с косой черты. Относительный путь не допускается. Новый URL-адрес должен быть абсолютным URL-адресом, начинающимся со схемы и имени хоста. В Apache HTTP Server 2.2.6 и более поздних версиях также используется URL-путь с косой чертой , и в этом случае будет добавлена ​​схема и имя хоста текущего сервера.

Я хотел бы предложить, чтобы изменить правила к этому если вы просто пропустите https перенаправление

RedirectMatch ^/abc/abcd https://www.example.com/otherurl/someaction 

Надеется, что это помогает.

+0

благодарит ваши комментарии, но имя хоста динамическое, оно основано на запросе, в mod_alias , как я могу получить $ {HTTP_Host} в запросе? – fightf

+0

Сколько хостов мы говорим? Если это всего лишь пара, вы можете жестко закодировать их в разные «VirtualHost», если вам нужно, чтобы они были динамическими, вы должны рассмотреть возможность использования ' mod_rewrite' и используя 'RewriteRule' вместо' RedirectMatch'. – Qben

+0

Согласитесь, я думаю, что мне нужно изменить это правило перезаписи mod_rewrite. Еще раз спасибо Спасибо за ваши комментарии и предложения. – fightf

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