Назад | Перейти на главную страницу

Перенаправление Apache и установка заголовков кеша?

Выполнить перенаправление в Apache просто (mod_alias):

RedirectMatch ^.*$ http://portal.example.com/

Установка заголовков кеша также проста:

Header set Cache-Control max-age=0
Header set Expires "Thu, 01 Dec 1994 16:00:00 GMT"

(Я не хочу, чтобы это было кешировано)

Но! Кажется, вы не можете сочетать два. Эта конфигурация приводит к отправке перенаправления, но не заголовков:

<VirtualHost *:80>
        ServerName __default__
        Header set Cache-Control max-age=0
        Header set Expires "Thu, 01 Dec 1994 16:00:00 GMT"
        RedirectMatch ^.*$ http://portal.example.com/
</VirtualHost>

Пример того, что происходит на самом деле:

jb@apto % telnet 192.168.0.1 80
Trying 192.168.0.1...
Connected to redirector.example.com.
Escape character is '^]'.
GET / HTTP/1.1
Host: foo

HTTP/1.1 302 Found
Date: Sat, 21 Aug 2010 09:36:38 GMT
Server: Apache/2.2.9 (Debian) Phusion_Passenger/2.2.9
Location: http://portal.example.com/
Vary: Accept-Encoding
Content-Length: 316
Content-Type: text/html; charset=iso-8859-1

(etc)

Есть идеи, как вернуть редирект с участием заголовки кеша?

Попробуйте добавить условие «всегда» в директиву заголовка, чтобы оно выглядело так:

Header always set Cache-Control max-age=0
Header always set Expires "Thu, 01 Dec 1994 16:00:00 GMT"

Это должно работать, без условия «всегда», я считаю, что по умолчанию используется значение «onsuccess», которое определяется как любой код ответа 2xx.

Вам нужно будет реализовать сценарий посредника на Perl или PHP (я бы использовал PHP, он проще, если он уже загружен). Ознакомьтесь с руководством по перезаписи, выполните поиск по запросу «Расширенное перенаправление»:

http://httpd.apache.org/docs/2.2/misc/rewriteguide.html

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