Перейти из форума на сайт.


Система IP-видеонаблюдения "Линия". Скачать бесплатную демо-версию для 16 камер. НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » mod_rewrite: документация, готовые решения, вопросы

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69

Открыть новую тему     Написать ответ в эту тему

Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mod_rewrite

Вот уже несколько раз встретился с этим вопросом. Недавно в тех. задании было указано что проект должен быть оптимизирован под поисковые системы. Поискав немного попал на mod_rewrite. Оказывается что mod_rewrite очень и очень полезная вещь. Вот несколько причин почему я решил разобраться с данным зверем:
 

  1. Если вы пишите форумы, сайт с новостями или любой сайт в котором есть конструкция hттp://mybestsite.com/article.php?n=3&page=1. Вы рано или поздно встретитесь с проблемой лицом к лицу, у таких сайтов есть огромный минус: адрес сайта выглядит для пользователей не "нормально", такой адрес не индексируется многими поисковыми системами, удаляется все после знака "?". Ниже приведенные ссылки для него все одни, но просмотрев их он получает разное содержимое (Что плохо сказывается на статистику вашего сайта)

    Код:
    hттp://mybestsite.com/article.php?n=3&page=1
    hттp://mybestsite.com/article.php?n=5&page=2
    hттp://mybestsite.com/article.php?n=6&page=7

    Пользователи у которых нету базовых знаний в Web программировании не могут понять что значит текст после article.php (?n=3&page=1). С использованием mod_rewrite можно на лету преобразовывать адреса типа

    Код:
    hттp://mybestsite.com/article.php?n=3&page=1

    в такой, более понятный и привычный для обыкновенных пользователей

    Код:
    hттp://mybestsite.com/articles/3/page1.htm

    А самое интересное что файл page1.htm вообще не существует, и пользователю не известен путь к файлу к которому он обращается и поисковые системы воспринимают такой адрес как обыкновенную ссылку на html страничку.
     
  2. С помощью mod_rewrite можно запретить скачивать ваши материалы с других сайтов, на собирание которых вы провели бессонные ночи. Например: у вас есть файл bestprogram.zip, у вас на страничке есть линк

    Код:
    <a href="hттp://mybestsite.com/download/bestprogram.zip">Download</a>

    какой-то придурок залазит на ваш сайт, просмотривает html код вашей странички и размещает туже ссылку но уже у себя на сайте.

    Код:
    <a href="hттp://mybestsite.com/download/bestprogram.zip">Download</a>

    и она будет работать без проблем, за трафик будет платить вы а слава и благодарности этому придурку! С помощью mod_rewrite можно запретить cкачивание файлов если referer не ваш сайт

 
Думаю этого достаточно что бы потратить несколько часов на изучение данного материала. Ниже привожу документацию по данному вопросу:
Русские ресурсы

Английские ресурсы

 
Необходимые навыки:

 
Настройка журналирования (Лога):
 
Чтобы включить лог mod_rewrite необходимо в описании вашего виртуального хоста (обычно это файл httpd.conf) добавить две строчки:  

Код:
Код:RewriteLog /путь/к/лог/файлу  
RewriteLogLevel 9  

И перезапустить апача. Крайне не рекомендуется производить это на работающем сервере, так как объемы отладочной информации генерируются действительно большие и найти свое бывает очень сложно.
 
ps: Доп ссылки
Много полезных примеров, но на английском http://www.askapache.com/htaccess/mod_rewrite-tips-and-tricks.html




PHP тут не совсем к месту в названии, потому убрал /Cheery/

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 15:26 24-06-2005 | Исправлено: Cheery, 01:07 11-10-2011
elektron



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как же должно быть в итоге?
 
Поставил RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4\.0.\(compatible;\ Synapse\) [OR]
 
Посмотрю завтра, блокирует или нет.

Всего записей: 238 | Зарегистр. 08-02-2003 | Отправлено: 13:10 24-08-2015 | Исправлено: elektron, 15:52 24-08-2015
Mavrikii

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
elektron
Пробел тоже не нужно экранировать

Всего записей: 4927 | Зарегистр. 20-09-2014 | Отправлено: 19:22 24-08-2015
elektron



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
Я пробовал не экранировать, ошибка 500. Сайт не работает.

Всего записей: 238 | Зарегистр. 08-02-2003 | Отправлено: 20:49 24-08-2015 | Исправлено: elektron, 20:49 24-08-2015
Mavrikii

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
elektron
а, да.. не сообразил сразу - он же после пробела ищет флаг )  
можно было заменить его на просто \s

Всего записей: 4927 | Зарегистр. 20-09-2014 | Отправлено: 22:51 24-08-2015
elektron



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не работает блокировка. Mozilla/4.0 (compatible; Synapse) продолжают лезть.

Всего записей: 238 | Зарегистр. 08-02-2003 | Отправлено: 10:32 25-08-2015
Mavrikii

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
elektron
может причина не тут, а в остальных правилах? или там набор для других UA и все срабатывает?
 
регулярка, в принципе, правильная. проверка в онлайн тестах показывает, что срабатывает.

Всего записей: 4927 | Зарегистр. 20-09-2014 | Отправлено: 18:59 25-08-2015
elektron



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
там набор для других UA, они работают
 
RewriteCond %{HTTP_USER_AGENT} ^MJ12bot [OR]
RewriteCond %{HTTP_USER_AGENT} ^Exabot [OR]
RewriteCond %{HTTP_USER_AGENT} ^AhrefsBot
RewriteRule ^.* - [F,L]

Всего записей: 238 | Зарегистр. 08-02-2003 | Отправлено: 22:14 25-08-2015
Mavrikii

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
elektron
при копировании UA ничего не теряете? пробелы там или еще что то.
ну попробуйте так
^Mozilla/4\.0\s+\(compatible;\s+Synapse\)

Всего записей: 4927 | Зарегистр. 20-09-2014 | Отправлено: 22:22 25-08-2015
elektron



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
RewriteCond %{HTTP_USER_AGENT} ^MJ12bot [OR]
RewriteCond %{HTTP_USER_AGENT} ^Exabot [OR]
RewriteCond %{HTTP_USER_AGENT} ^AhrefsBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4\.0\s+\(compatible;\s+Synapse\)
RewriteRule ^.* - [F,L]
 
Этот вариант работает. Спасибо за помощь!

Всего записей: 238 | Зарегистр. 08-02-2003 | Отправлено: 14:55 26-08-2015
FoxBlack09

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте, уважаемые специалисты. Подскажите пожалуйста, как должно выглядеть правило блокировки по referer-у для Nginx (наверняка веб сервер не важен, но всё же я решил указать)? Мой текущий вариант:
RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?buttons-for-website.com.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://*.glowsoftmobile\.ru [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://*.semalt\.com [NC,OR]
RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?makeprosoft.ru.*$ [NC,OR]
RewriteCond %{HTTP_REFERER| ^http://*.alipromo\.com [NC,OR]
RewriteCond %{HTTP_REFERER| ^http://*.copi\.st [NC,OR]
RewriteCond %{HTTP_REFERER| ^https://*.iqoption\.com [NC,OR]
RewriteCond %{HTTP_REFERER| ^http://*.777s\.ru [NC,OR]
RewriteCond %{HTTP_REFERER| ^http://*.surfingbird\.ru [NC,OR]
RewriteCond %{HTTP_REFERER| ^http://*.hitboss\.ru [NC,OR]
RewriteCond %{HTTP_REFERER| ^http://*.la2q\.ru [NC,OR]
RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?100dollars-seo\.com.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?success-seo\.com.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?videos-for-your-business\.com.*$[NC,OR]
RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?semaltmedia\.com.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?cmle\.ru.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?cameleo\.ru.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?24open\.ru.*$ [NC]
RewriteRule ^.* - [F,L]  
судя по статистике, не работает.

Всего записей: 477 | Зарегистр. 01-04-2009 | Отправлено: 16:19 26-08-2015 | Исправлено: FoxBlack09, 16:19 26-08-2015
Mavrikii

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FoxBlack09
Еще как важен сервер. У nginx вообще синтаксис конфигов другой.
Если nginx конечный сервер, а не фронтенд, то в раздел Помощь сисадмину. Ну и в онлайне есть сервисы перевода правил права в правила для nginx

Всего записей: 4927 | Зарегистр. 20-09-2014 | Отправлено: 17:43 26-08-2015
FoxBlack09

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Да, я перепроверил одним простым правилом .htaccess-а и убедился что хостер предоставил ложную информацию: всё таки у меня апач (т.к. правило RewriteCond %{REMOTE_ADDR} сработало, да и визуально какие либо зацепки по которым можно определить апач это или nginx отсутствуют).

Всего записей: 477 | Зарегистр. 01-04-2009 | Отправлено: 18:15 26-08-2015 | Исправлено: FoxBlack09, 18:17 26-08-2015
Mavrikii

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FoxBlack09
nginx, возможно, кэширующий фронтенд.
 
точки экранировать нужно, если не хотите, чтобы они означали любой символ.
более того, .*$ в конце не нужно, это и так подразумевается автоматически.
 

Всего записей: 4927 | Зарегистр. 20-09-2014 | Отправлено: 18:55 26-08-2015
FoxBlack09

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
И вновь смотрю статистику, с success-seo есть переходы, значит
RewriteCond %{HTTP_REFERER} ^http://*.success-seo\.com [NC,OR]  
не работает.

Всего записей: 477 | Зарегистр. 01-04-2009 | Отправлено: 10:50 27-08-2015
Mavrikii

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FoxBlack09
Потому, что запись вида //* говорит о том, что слеш может быть неограниченное число раз или ни разу. Точку куда съели? http://.*\.success и так далее

Всего записей: 4927 | Зарегистр. 20-09-2014 | Отправлено: 11:04 27-08-2015
FoxBlack09

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Спасибо, исправил.

Всего записей: 477 | Зарегистр. 01-04-2009 | Отправлено: 11:17 27-08-2015
memo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос как-бы простой...
 
Нужно сделать такое перенаправление:
 
1 www.site1.com/dir --> http://site2.com/dir
 
2. site1.com/dir --> http://site2.lt/dir
 
cPanel генератор создаёт такой скрипик:
 
RewriteEngine On
RewriteCond %{HTTP_HOST} ^site1\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.site1\.com$
RewriteRule ^dir\/?$ "http\:\/\/site2\.com\/dir" [R=301,L]
 
 
Вроде всё правильно, но переадресация не работает:
 
http://www.site1.com/dir/modules/sections/index.php?op=viewarticle&artid=40
http://www.site1.com/dir/modules/sections/index.php?op=viewarticle&artid=39
http://www.site1.com/dir/modules/sections/index.php?op=viewarticle&artid=37
...и т.д.
 
Нет перенаправления на:
 
http://site2.com/dir/modules/sections/index.php?op=viewarticle&artid=40
http://site2.com/dir/modules/sections/index.php?op=viewarticle&artid=39
http://site2.com/dir/modules/sections/index.php?op=viewarticle&artid=37
 
Где может быть ошибка?  
Может быть на хосте что-то не так прописано?

Всего записей: 627 | Зарегистр. 10-08-2004 | Отправлено: 08:04 15-09-2015
Mavrikii

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
memo
обслуживается все одним сервером и из одной папки?
если нет, то проще всего использовать http://httpd.apache.org/docs/2.4/mod/mod_alias.html#redirect
 

Цитата:
Где может быть ошибка?  

флаг QSA нужно добавить. ну и ваше правило не сработает, так как оно предназначено чисто для папки /dir/, а не всего того, что может в ней находиться.
 
RewriteRule ^dir\/?(.*)$ http://site2.com/dir/$1 [QSA,R=301,L]
 
не проверял. в ссылке справа регулярка уже не применяется, поэтому ничего экранировать не нужно.

Всего записей: 4927 | Зарегистр. 20-09-2014 | Отправлено: 08:13 15-09-2015 | Исправлено: Mavrikii, 08:18 15-09-2015
memo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
да, спасибо, мне подсказали, что надо использовать динамическое перенаправление и правило rewrite regex
 
а насчёт /dir/ сказали то же, что это чисто для папки
 
вроде переоценил возможности cPanel
 
где можно найти простой-понятный материал с rewrite regex или как с его помощью написать то, что мне надо?

Всего записей: 627 | Зарегистр. 10-08-2004 | Отправлено: 15:47 15-09-2015
Mavrikii

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
memo

Цитата:
или как с его помощью написать то, что мне надо?  

я же написал основную часть. материал в шапке.

Всего записей: 4927 | Зарегистр. 20-09-2014 | Отправлено: 18:17 15-09-2015
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69

Компьютерный форум Ru.Board » Интернет » Web-программирование » mod_rewrite: документация, готовые решения, вопросы

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2017

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru