Что не так с моим .htaccess ?

KS
На сайте с 29.03.2016
Offline
3
829

По идее должны обрабатываться переходы только с доменных зон, включенных в список, но обрабатываются все, в том числе и .ru

RewriteCond %{HTTP_REFERER} ^.*\.ac.*$ [NC,OR]

RewriteCond %{HTTP_REFERER} ^.*\.ad.*$ [NC,OR]

RewriteCond %{HTTP_REFERER} ^.*\.ae.*$ [NC,OR]

RewriteCond %{HTTP_REFERER} ^.*\.af.*$ [NC,OR]

...

RewriteCond %{HTTP_REFERER} ^.*\.ye.*$ [NC,OR]

RewriteCond %{HTTP_REFERER} ^.*\.yt.*$ [NC,OR]

RewriteCond %{HTTP_REFERER} ^.*\.za.*$ [NC,OR]

RewriteCond %{HTTP_REFERER} ^.*\.zm.*$ [NC,OR]

RewriteCond %{HTTP_REFERER} ^.*\.zw.*$ [NC]

RewriteRule .* http://example.com/sample.php [R=302,L]

А можно ли сделать иначе - перегонять всех, кроме указанных?
И список исключений - Россия, Белоруссия, Украина, Казахстан и т.д.

Единственный момент, если перегоняем всех, то нужно исключение и для случая, когда реферера нет вообще. Иначе будет перебрасывать даже прямые заходы.

Вот только... как?

D
На сайте с 07.11.2000
Offline
219
#1

Как миниум у Вас регулярка:

^.*\.aero.*$

под нее подойдет и www.aeroport.ru

Нужно что-то вроде:

^.*\.aero\/.*$

И вообще объединить все в одну:

^.*\.(aero|com|net|...)\/.*$

KS
На сайте с 29.03.2016
Offline
3
#2

Спасибо! А "наоборот" можно реализовать? Запрещено все, что не разрешено...

Сделал вот так, почему-то не срабатывает...

RewriteCond %{HTTP_REFERER} ^.*\.(ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bl|bm|bn|bo|bq|br|bs|bt|bv|bw|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mf|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw)\/.*$ [NC]
D
На сайте с 07.11.2000
Offline
219
#3

\/ - возможно не нужно экранирование, а просто /:

^.*\.(aero|com|net|...)/.*$

Если правильно понимаю вопрос с "наоборот" - это ! перед выражением.

Пустой реферер:

RewriteCond %{HTTP_REFERER} !^$

KS
На сайте с 29.03.2016
Offline
3
#4

Dimka, спасибо, все работает!

Для текущей цели решил конструкции не применять, но нашлись другие задачи под заданные выражения.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий