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

Странное поведение с флагами RewriteRule?

У меня есть галерея с картинками. Если кто-то связывает изображения моей галереи откуда-то еще (с удаленного сервера), должно быть показано запрещенное изображение. Это в основном работает, но теперь я обнаружил странное поведение с моим правилом перезаписи. Вот правило:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^http://www.mydomain.net/pictures/.*$ [NC]   
RewriteRule .*\.(png|PNG)$ http://www.mydomain.net/pics/linkingpicsforbitten.png [R,L]

Что именно происходит: галерея состоит из shtml-страниц, которые связывают изображения с относительными путями, и я могу просматривать изображения назад и вперед. Это работает, отображается каждое изображение. Когда я вызываю страницу на вредоносном удаленном сервере, которая связывает изображение моей галереи, удаленный сервер получает запрещенное изображение, которое является желаемым эффектом, но теперь происходит что-то странное: снова на моем собственном сервере, когда я просматриваю свое изображение галерею к изображению, которое было вызвано злобным удаленным сервером, я внезапно получаю запрещенное изображение и там, даже в моей галерее. Когда я нажимаю F5, чтобы перезагрузить галерею, изображение снова работает. Но это недопустимо.
Что я могу сделать? Я пытался изменить и объединить или оставить флаги RewriteRule, но ничего не помогло. Единственное приемлемое решение - установить флаг [F]. В этом случае злой удаленный сервер видит не запрещенное изображение, а пустую страницу, но, по крайней мере, моя галерея работает каждый раз. Но я бы предпочел, чтобы забитый образ работал. Любые идеи?

Запрещенное изображение кешируется в вашем браузере. Вам нужно использовать mod_headers, чтобы он никогда не кешировался.

Пытаться:

<FilesMatch "linkingpicsforbitten\.png$">
<IfModule mod_headers.c>
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</IfModule>
</FilesMatch>

Я считаю, что ваш браузер просто кэширует запрещенное изображение. Вы должны уметь использовать mod_expires чтобы применить политику отказа от кеширования только для вашего запрещенного изображения.