совершенно новый с .htaccess, и я неделями читал инструкции и много экспериментировал. Мне отчаянно нужно, чтобы кто-то посмотрел на эту штуку и сказал, если что-то не так или просто не сработает :) Вот это:
Я думаю, что некоторые из них повторяются и могут или должны быть объединены, но я не понимаю, как это сделать. Материал AddHandler был для некоторых проблем с веб-сайтом php, которые у меня были, порядок разрешения запрета был попытками заблокировать ссылки с плохих сайтов, и все перезаписи были вторыми попытками заблокировать все, кроме нескольких хороших. Это собиралось в течение нескольких недель, поэтому я не сомневаюсь, что где-то ошибся. Любая помощь была бы замечательной. Заранее спасибо.
<AddHandler server-parsed .htm
AddHandler server-parsed .html
Addhandler application/x-httpd-php .html .php>
<order allow,deny
allow from all
deny from *.ru
deny from tamanria.com>
<RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?ceplocal2003.org(/)?.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yellowpages.ca(/)?.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?cep.ca(/)?.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?goldbook.ca(/)?.*$ [NC]
RewriteRule .*\.(gif|jpg|jpeg|bmp|png|pdf)$ http://www.ceplocal2003.org/images/Refererblock.gef [R,NC]>
<RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} .ru [NC,OR]
RewriteCond %{HTTP_REFERER} refblock\.com
RewriteRule .* - [F]>
<RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} tamanria.com [NC,OR]
RewriteCond %{HTTP_REFERER} refblock\.com
RewriteRule .* - [F]>
<ErrorDocument 404 /Custom404.html>
enter code here
Во-первых, у вас неправильный синтаксис.
.htaccess
файлы не нуждаются в угловых скобках («<>») вокруг директив; они нужны только тогда, когда вы создаете подразделы и указываете параметры для каждого раздела, как в
<Directory /some/dir>
allow from all
</Directory>
Кроме того, излишне много раз указывать "RewriteEngine on"; одного будет достаточно (если вы не используете его в подразделе).
И последнее, но не менее важное: ваша директива "order" сообщает Apache, что директивы "allow" должны иметь приоритет чем запретить, так что вы фактически разрешаете доступ к своему сайту из любого места, потому что ваши директивы «запретить» никогда не обрабатываются даже после того, как сработает «разрешить от всех».
Это должно работать лучше:
AddHandler server-parsed .htm
AddHandler server-parsed .html
Addhandler application/x-httpd-php .html .php
order deny,allow
deny from *.ru
deny from tamanria.com
allow from all
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?ceplocal2003.org(/)?.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yellowpages.ca(/)?.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?cep.ca(/)?.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?goldbook.ca(/)?.*$ [NC]
RewriteRule .*\.(gif|jpg|jpeg|bmp|png|pdf)$ http://www.ceplocal2003.org/images/Refererblock.gef [R,NC]
RewriteCond %{HTTP_REFERER} .ru [NC,OR]
RewriteCond %{HTTP_REFERER} refblock\.com
RewriteRule .* - [F]
RewriteCond %{HTTP_REFERER} tamanria.com [NC,OR]
RewriteCond %{HTTP_REFERER} refblock\.com
RewriteRule .* - [F]
ErrorDocument 404 /Custom404.html
Хотя Массимо только что исправил форматирование вики, в коде все еще есть ошибки.
RewriteCond %{HTTP_REFERER} .ru [NC,OR]
заблокирует все, что содержит какой-либо символ (ru) в строке.
поэтому любой URL-адрес, содержащий aru, будет отклонен. Для этого следует использовать более строгий набор правил.
RewriteRule .* - [F]>
вызовет ошибку 500, поскольку это недопустимая строка. удаление> исправит это.
Раньше у меня было более 50 повторов, а сейчас - 1, поэтому я не могу комментировать ваш ответ. Пожалуйста, объедините ответ в комментарий. Спасибо.
deny from *.ru
deny from tamanria.com
Это приведет к поиску в DNS КАЖДОГО запроса к вашему сайту. Поскольку у вас также настроена блокировка рефереров ниже, я предполагаю, что вы пытались заблокировать контент, который был связан с вашим сайтом. Если бы это было так, эти правила не помогли бы этому предотвратить.
Поскольку вы просто пытаетесь заблокировать сайты, которые используют хотлинкинг, вы можете установить либо правила, которые устанавливают сайты, которые вы хотите разрешить, либо запретить те, которые используют хотлинкинг. Я предпочитаю предотвращать проблему, а не видеть скачок пропускной способности, а затем отчаянно пытаться выяснить, на каком сайте есть горячая ссылка.
Я бы подумал, как минимум, следующее подойдет
AddHandler server-parsed .htm
AddHandler server-parsed .html
Addhandler application/x-httpd-php .html .php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} ~Refererblock.gef$ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(.*@)?([a-z0-9-]+\.)*(yellowpages\.ca|cep\.ca|goldbook\.ca)(:[0-9
]+)?(/.*)?$ [NC]
RewriteRule .*.(asf|mpg|mpeg|wmv|avi|rm|gif|jpeg|jpg|zip)$ http://www.ceplocal2003.org/images/Refererblock.gef [NC,F,L]
Спасибо user46528 и Massimo, надеюсь, я никого не пропустил. Я не уверен, как объединить свой ответ с комментарием :( Для .ru я пытался фактически заблокировать любой домен, заканчивающийся на .ru, от ссылки. Я нашел много неприятных маленьких сайтов .ru по какой-то причине.
Код <был добавлен сюда по ошибке, когда я выяснял, как правильно отформатировать запрос помощи :)
Итак, я вижу объединяющую часть, но я вижу два разных типа, независимо от того, как вы это пишете, оба перечислены ниже.
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} ~Refererblock.gef$ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(.*@)?([a-z0-9-]+\.)*(yellowpages\.ca|cep\.ca|goldbook\.ca)(:[0-9
]+)?(/.*)?$ [NC]
RewriteRule .*.(asf|mpg|mpeg|wmv|avi|rm|gif|jpeg|jpg|zip)$ http://www.ceplocal2003.org/images/Refererblock.gef [NC,F,L]
ИЛИ
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?ceplocal2003.org(/)?.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yellowpages.ca(/)?.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?cep.ca(/)?.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?goldbook.ca(/)?.*$ [NC]
RewriteRule .*\.(gif|jpg|jpeg|bmp|png|pdf)$ http://www.ceplocal2003.org/images/Refererblock.gef [R,NC]>
Если бы мне пришлось угадывать, я бы сказал, что оба в порядке, но первый выглядит чище.
Во-вторых, я не уверен, был ли у меня параметр allow, deny просто в обратном порядке или я должен полностью избавиться от него, я не хочу так сильно создавать DNS-поиск.
Этот ceplocal2003 - это рабочий веб-сайт, который я поддерживаю, и, недавно проверяя свой SEO и выполняя поиск в Google по запросу ceplocal2003, я обнаружил множество бесполезных сайтов, которые кажутся просто фермами ссылок, которые ссылались на наш сайт. Здесь я начал читать о .htaccess.
Итак, есть шанс с этой информацией, что приведенные выше предложения могут быть скомпилированы в блок, который подойдет мне.
Если я понимаю то, что вы говорите, я должен полностью заблокировать все «хотлинкинг» и кражу с других сайтов, а затем просто разрешить те, которые должны быть разрешены, такие как yellowpages, goldbook и т. Д.
Боже, я когда-нибудь чувствовал, что Алиса падает в кроличью нору LOL, неделю назад я бы подумал, что htaccess - это что-то Intel, разработанное для материнской платы :)
порядок deny, allow предназначен для блокировки IP-адресов / хостов (и на самом деле не должен использоваться для блокировки хостов, поскольку он будет выполнять поиск DNS для каждого запроса, который может быть заблокирован).
Лично я считаю, что вам следует просто упреждающе блокировать любую попытку использования хотлинкинга, а не блокировать те, которые злоупотребляют этим. если вы хотите заблокировать всех рефереров .ru, на них будут распространяться другие правила для ваших изображений.
Если вы хотите запретить им вообще ссылаться на ваш сайт, вам нужно будет написать более общее правило и включить его под правилами, которые блокируют хотлинкинг изображений:
RewriteCond %{HTTP_REFERER} ^http://(.*@)?([a-z0-9]+\.)*(refblock\.com|tamanria\.com|\.ru)(:[0-9]+)?(/.*)?$ [NC]
RewriteRule .* - [F,L]
В то время как клуб мальчиков StackOverflow снова оценивает неправильный ответ и скрывает правильный ответ, я объединил данные в один пост, который можно скопировать. У меня недостаточно репутации, чтобы редактировать мой предыдущий пост или комментировать пост Массимо, который технически действителен, но может вызвать проблемы с производительностью в будущем. Использование имен хостов в блоке deny from - очень распространенная ошибка новичков, и в 99% случаев проблема не решается. Блокировка запрета предотвратит доступ к вашему сайту любого хоста, который содержит обратный DNS с окончанием .ru или tamanria.com. Это при условии, что обратный DNS настроен правильно. Многие хостинговые компании используют свой собственный домен для обратного сопоставления, а не обслуживаемое доменное имя. Запрет на .ru заблокировал бы любого пользователя, у которого был обратный поиск DNS, заканчивающийся на .ru, что могло быть приемлемым компромиссом. Однако любой, у кого есть IP-адрес без надлежащего обратного DNS, столкнется с задержкой при доступе к сайту. Если бы их сайт имел средство проверки ссылок или паук для поиска контента, тогда это было бы правильно, но было бы безопаснее заблокировать IP-адрес сервера или диапазон IP-адресов. Еще одна распространенная, но фатальная ошибка в заявлении deny:
deny from 1.2.3.*
Хотя это выглядит достаточно невинно, * в конце означает, что значение необходимо сравнить с 1.2.3.domain.com, что снова вызывает обратный поиск DNS для каждого запроса файла. Чтобы выполнить частичное совпадение с блоком запрета, правильный формат:
deny from 1.2.3.
или
deny from 1.2.3.0/24
В любом случае, в .htaccess следует использовать следующее:
AddHandler server-parsed .htm
Addhandler application/x-httpd-php .html .php
AddType image/gif .gef
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(.*@)?([a-z0-9-]+\.)*(yellowpages\.ca|cep\.ca|goldbook\.ca)(:[0-9
]+)?(/.*)?$ [NC]
RewriteRule .*.(asf|mpg|mpeg|wmv|avi|rm|gif|jpeg|jpg|zip)$ http://www.ceplocal2003.org/images/Refererblock.gef [NC,F,L]
#include this line only if you want to block ALL referring access from refblock.com, tamanria.com and all .ru sites.
RewriteCond %{HTTP_REFERER} ^http://(.*@)?([a-z0-9]+\.)*(refblock\.com|tamanria\.com|\.ru)(:[0-9]+)?(/.*)?$ [NC]
RewriteRule .* - [F,L]
Я удалил проверку для Refererblock.gef, так как это не одно из заблокированных расширений и ненужная проверка. Когда я писал правила ранее, я неправильно интерпретировал его как .gif, а не .gef. Кроме того, при проверке вышеуказанного .htaccess я заметил, что ваш файл .gef обслуживается с неправильным типом mime text / plain, а не image / gif. Я включил указанную выше директиву AddType, чтобы исправить это, чтобы пользователям Firefox не предлагалось сохранить изображение на диск.
Я не знаю, хотели ли вы анализировать файлы .html для SSI и для php. Я удалил парсинг .html, так как Apache не очень хорошо с этим справляется. В Apache2 вы должны использовать обработчики для анализа страницы, если вам нужно использовать PHP и SSI на одной странице.
Надеюсь, вы получите эту информацию быстро, прежде чем она будет отредактирована / предана забвению. Хотя, если история научила меня чему-нибудь об этом сайте, мы увидим, как ответ будет объединен с чьим-то ответом, у которого гораздо более высокая карма.