1) Есть ли способ остановить вызов изображения путем ввода его пути к файлу, который не включает блокировку пустых ссылок? У меня есть несколько случаев, когда я хотел бы сделать это, но не весь сайт.
Я не думаю, что есть выход, но вы можете перечислить исключения в RewriteCond для отдельного набора правил:
# Check to see if referer is blank
RewriteCond %{HTTP_REFERER} ^$
# Check to see if it isn't one of the files we're going to allow blank referers
RewriteCond %{REQUEST_URI} !^/images/allow_blank_referer/
RewriteCond %{REQUEST_URI} !profile_picture\.png$
# Block images
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
В этом примере будут заблокированы все пустые рефереры, кроме любых запрашивающих изображений из /images/allow_blank_referer/
и любого изображения, заканчивающегося profile_picture.png
.
2) У меня есть правильный код, чтобы обеспечить Google, MSN и Yahoo надлежащий доступ к моим изображениям?
Нет, эти строки в вашем .htaccess:
RewriteCond %{HTTP_REFERER} !google. [NC]
RewriteCond %{HTTP_REFERER} !search?q=cache [NC]
RewriteCond %{HTTP_REFERER} !msn. [NC]
RewriteCond %{HTTP_REFERER} !yahoo. [NC]
Просто разрешите людям, которые загружают изображение, связанное с google / msn / yahoo, и свои поисковые кэши. Например, если кто-то выполняет поиск изображений в Google и нажимает на одно из ваших изображений, вы их не заблокируете.
Чтобы убедиться, что роботы google, msn и yahoo не заблокированы, нужно проверить HTTP_USER_AGENT, например, в тех условиях перезаписи, которые вы можете вставить:
RewriteCond %{HTTP_USER_AGENT} !googlebot [NC]
RewriteCond %{HTTP_USER_AGENT} !msnbot [NC]
RewriteCond ${HTTP_USER_AGENT} !slurp [NC]
Они будут пропускать проверки реферером, если в пользовательском агенте присутствует какая-либо из этих трех вещей (slurp = Yahoo!), список пользовательских агентов можно получить из таких мест, как http://www.robotstxt.org/db.html
3) Код, который у меня есть, объединен из более чем одного источника. Поскольку я не знаю синтаксиса, мне интересно, почему только первый RewriteRule без замещающего изображения начинается с \, а не со второго?
Первый имеет «\», чтобы избежать «.». "." в регулярном выражении соответствует чему-либо, что-то вроде подстановочного знака, и «\» избегает его, что означает «я действительно имею в виду точку, а не подстановочный знак» В закомментированном RewriteRule отсутствует "\", вероятно, потому, что кто-то ленив. Он по-прежнему будет соответствовать запросу, заканчивающемуся, например, .gif
, но он также будет соответствовать чему-то, оканчивающемуся на zgif
, тогда как первый RewriteRule не будет. Если вы собираетесь использовать закомментированный RewriteRule (если вы это сделаете, обязательно закомментируйте RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
), я бы предложил поставить "\" перед этим первым периодом.