Разрешить хотлинкинг, но перенаправить, если я сам реферер!

Я хочу, используя htaccess, разрешить горячую ссылку, НО, если кто-то просматривает изображение на моем сайте, я хочу перенаправить их на «размещенную» версию изображения, где я отображаю свою навигацию и т. д.

Таким образом, по сути, это не повлияет на любого, кто делает хотлинк с внешнего сайта, но если кто-то просматривает изображение на моем сервере напрямую, то есть www.domain.com/image.jpg, оно будет перенаправлено. Я также хочу убедиться, что я могу правильно отображать изображения на своем сайте.

Кто-нибудь может помочь?

РЕДАКТИРОВАТЬ: вот код, который у меня сейчас есть

RewriteCond %{REQUEST_FILENAME} \.jpg$
RewriteCond %{HTTP_REFERER} =""
RewriteRule ^userpics/covers/(.*).jpg$ /view/$1.html [R=301]

RewriteRule ^view/(.*).html$ /view.html?img=$1 [L]

Спасибо


person Chris    schedule 28.02.2010    source источник


Ответы (3)


Используйте .htaccess

RewriteEngine on
RewriteCond %{REQUEST_URI} \.(jpg|png|gif)$
RewriteCond %{HTTP_REFERER} ^https?://yoursite\.com/.*$ [NC]
RewriteRule ([^/]+)$ url_to_script?img=$1

Вы могли бы упростить

RewriteCond %{HTTP_REFERER} ^https?://yoursite\.com/.*$ [NC]

чтобы просто

RewriteCond %{HTTP_REFERER} yoursite\.com [NC]

И правило можно записать как

 RewriteRule (.*) url_to_script?img=$1

если вам нужно включить путь к изображению в свой параметр.

person jasonbar    schedule 28.02.2010
comment
Я пробовал это, и это работает, если вы открываете изображение напрямую, но если вы ссылаетесь на изображение через ссылку на веб-сайт, HTTP_REFERRER не равен нулю, поэтому вы видите изображение правильно - что можно с этим сделать? - person Chris; 28.02.2010
comment
@Chris: Это будет переписано только в том случае, если реферер является вашим веб-сайтом. Если вы обращаетесь к изображению напрямую или щелкаете по ссылке с другого сайта, он ничего не сделает, кроме как даст вам изображение. Я только что попробовал это на своем сервере, и он работает так, как ожидалось. Меня перенаправляют, только если я перехожу по ссылке из своего собственного домена. - person jasonbar; 28.02.2010
comment
Я обновил свой вопрос тем, что у меня есть в настоящее время, на основе комбинации всех ответов. Он работает отлично, за исключением случаев, когда установлен реферер, есть ли другой способ сделать это? Спасибо! - person Chris; 28.02.2010
comment
@Chris: Вы хотите убедиться, что реферер ${HTTP_REFERER} настроен на ваш домен. Условие в моем ответе делает это. - person jasonbar; 28.02.2010
comment
Джейсон, если бы на изображение была ссылка с другого сайта, скажем, изображений Google, тогда оно бы не перенаправляло, не так ли? - person Chris; 28.02.2010
comment
@Chris: Нет, если реферера нет или реферер не является вашим доменом, он не будет перенаправляться. - person jasonbar; 28.02.2010

Вы должны использовать mod_rewrite, если HTTP_REFERRER пуст, тогда перенаправьте на /image-with-nav.php?image=$1
Попробуйте что-то вроде этого
RewriteEngine on

RewriteCond %{HTTP_REFERER} ^$

.* image-with-nav.php?image=$1 [L]

person DCC    schedule 28.02.2010
comment
Это в значительной степени то, что я хочу, но если я нажму на ссылку на сайте, которая приведет меня прямо к изображению, не будет ли тогда установлен реферер? - person Chris; 28.02.2010
comment
Ну да, но это компромисс, 100% достичь этого невозможно. - person DCC; 01.03.2010

Теперь вам нужно проверить реферер, потому что URL-адрес всегда является URL-адресом вашего изображения, поскольку это HTTP-запрос. Вы можете пойти с чем-то вроде этого:

RewriteCond %{REQUEST_FILENAME} \.(jpg|png|gif)$
RewriteCond %{HTTP_REFERER} =""
RewriteRule (.*) http://someurl.com [R=301]
person voodoo555    schedule 28.02.2010
comment
Разве реферер не будет установлен, если вы перейдете к изображению с другой страницы? - person Chris; 28.02.2010