Почему %{HTTP_HOST} не работает, а литеральная строка HTTP_HOST работает?

У меня есть следующий код Apache для предотвращения хотлинкинга, и он работает.

RewriteCond %{HTTP_REFERER} ^$ [OR]
RewriteCond %{HTTP_REFERER} !^https?://itransformer.*$ [NC]
RewriteRule /usuarios/.*\.(gif|jpe?g|png|wbmp)$ - [R=404,L]

Вопросов два:

1. Если я изменю приведенное выше на:

RewriteCond %{HTTP_REFERER} ^$ [OR]
RewriteCond %{HTTP_REFERER} !^https?://%{HTTP_HOST}.*$ [NC]
RewriteRule /usuarios/.*\.(gif|jpe?g|png|wbmp)$ - [R=404,L]

это не работает. %{HTTP_HOST} равно itransformer (на моем локальном хосте), поэтому я не понимаю, почему это не работает таким образом.

2. Страница 404 по умолчанию отображается вместо моей пользовательской страницы 404, которая отображается во всех других ответах 404. Что здесь может происходить?


person Manolo    schedule 31.10.2013    source источник


Ответы (1)


  1. Причина, по которой это не так, заключается в том, что вы не можете использовать эти внутренние переменные Apache в правой части RewriteCond.

  2. Я только что заметил R=404. Если вам нужен собственный обработчик 404, убедитесь, что у вас есть похожая строка поверх вашего .htaccess:

    ErrorDocument 404 /404.php
    
person anubhava    schedule 31.10.2013
comment
Ух ты! Я мог бы бодаться головой о стену! А второй вопрос знаете? - person Manolo; 31.10.2013
comment
Да, но вы не разместили никакого пользовательского обработчика 404, поэтому я не мог дать вам ответ на этот вопрос. - person anubhava; 31.10.2013