2009-08-11 2 views
1

Я пытаюсь установить заголовки истечения для ресурсов с авто-версией Rails, например any.css? 1234567890. (Я не хочу устанавливать заголовки expire для неверсированных ресурсов.) Единственный способ, который я мог найти в Интернете, состоял в двух шагах: 1) переписать все URL-адреса, которые заканчиваются на 10 цифр для загрузки из/public/add_expires_header, а не из/public, где add_expires_header - символическая ссылка, указывающая на/public 2) Добавьте дату истечения срока действия ко всем файлам из add_expires_header.Пассажир/Apache: не удается установить заголовки истечения для версий (правило перезаписи не распознано)

Кажется хорошей идеей - но пассажир, похоже, не признает правило перезаписи, как указано ниже.

(Примечание:. Много людей, казалось, думал, что они могли бы достичь своей цели с помощью FilesMatch, но я читал в другом месте, что FilesMatch не может видеть строку запроса)

 
#from sites_enabled/sitename in the tags 
... 
RewriteCond %{QUERY_STRING} ^[0-9]{10}$ 
RewriteRule ^(.*)$ /add_expires_header%{REQUEST_URI} [QSA] 

    ExpiresActive On 
    ExpiresDefault "access plus 1 years" 

... 

----- 
#curl indicates that rewrite rule isn't taking effect 

[email protected]:~$ curl -I -L "http://x.com/stylesheets/style.css?1249092148" 
HTTP/1.1 200 OK 
Date: Tue, 11 Aug 2009 04:07:49 GMT 
Server: Apache/2.2.11 (Ubuntu) Phusion_Passenger/2.2.4 PHP/5.2.6-3ubuntu4.1 with Suhosin-Patch 
Last-Modified: Sat, 01 Aug 2009 02:02:28 GMT 
ETag: "455b-2fbb-4700aedc5f500" 
Accept-Ranges: bytes 
Content-Length: 12219 
Vary: Accept-Encoding 
Content-Type: text/css 

[email protected]:~$ curl -I -L "http://x.com/add_expires_header/stylesheets/style.css?1249092148" 
HTTP/1.1 200 OK 
Date: Tue, 11 Aug 2009 04:07:55 GMT 
Server: Apache/2.2.11 (Ubuntu) Phusion_Passenger/2.2.4 PHP/5.2.6-3ubuntu4.1 with Suhosin-Patch 
Last-Modified: Sat, 01 Aug 2009 02:02:28 GMT 
ETag: "455b-2fbb-4700aedc5f500" 
Accept-Ranges: bytes 
Content-Length: 12219 
Cache-Control: max-age=31536000 
Expires: Wed, 11 Aug 2010 04:07:55 GMT 
Vary: Accept-Encoding 
Content-Type: text/css 

Я также попытался в том числе переписывать вещи в apache2.conf, httpd.conf и public/.htacess

ответ

1

Я предпочитаю делать это, комбинируя его с использованием хоста ресурсов в отдельном субдомене, чтобы избежать проблемы с перезаписи. Таким образом, вы можете установить заголовки expire для всего, что находится на этом поддомене. Вы можете активировать это в рельсах в средах/production.rb.

Если вы не хотите идти с отдельной поддомен я думаю, следующий код должен это делать, хотя я не проверял это сам:

ExpiresActive On 
    <FilesMatch "\.(ico|gif|jpe?g|png|js|css)$"> 
    ExpiresDefault "access plus 1 year" 
    </FilesMatch>