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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 70 71

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

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
MyGoogle

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Странное что то происходит, захожу по одному урлу, первый раз, пише ок 200 ОК.
Захожу по другому урлу (такой же директории, т.е отличия лиж название) пише 302 мувед.
Потом захожу на первый урл, где было 200 ОК - пише 302 ! в заголовках тоже... как это такое может быть не пойму.. т.е 1 раз срабатывает 200 ОК потом всегда 302 даже где было 200 ОК
 
 
п.с Щас скачаю ксену 2010 года, а то у меня аж 2008 глянул версию может в программе ошибка, потому что открываю все браузеры слежу за заголовками везде пишет 200 ОК  - и нет никаких 302..

Всего записей: 219 | Зарегистр. 06-12-2008 | Отправлено: 11:23 11-04-2014 | Исправлено: MyGoogle, 11:50 11-04-2014
MyGoogle

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброе время суток.
 
У меня возник вопрос,
 
Как такое сделали ?
 
К примеру есть ссылка
 
www.site.com/cat/auto/auto_bmw_id123.html
 
Если я к примеру пишу в ссылке (id122423234232323) делая как бы id не существующим.
 
То меня перекидывает на поддиректорию т.е сюда с 301 редиректом
 
 
www.site.com/cat/auto/
 
 
Как сделать такое на сайте у себя ? т.е если урл не валидный то тебя перекидывает на подкатегорию того урла..
 
 

Всего записей: 219 | Зарегистр. 06-12-2008 | Отправлено: 11:22 16-04-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MyGoogle

Цитата:
т.е если урл не валидный то тебя перекидывает на подкатегорию того урла..

скрипт, на который передаются данные через mod_rewrite, проверяет наличие нужной записи.
если нет, то  
header('Location: /url', 301);
exit;

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:40 16-04-2014
perdun



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
подскажите, плз, как отфильтровать запросы с полным урл вида "GET http://google.com/etc.."
надо чтобы проходили только относительные "GET /wp-content/themes...."
 
пишу такое правило

Код:
RewriteRule !^http://(www.)?site.nsk.ru/.*$ - [F]

но чота в логах - форбиден вообще для всего..
где не так?

Всего записей: 1499 | Зарегистр. 21-01-2004 | Отправлено: 01:06 02-05-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
perdun

Цитата:
как отфильтровать запросы с полным урл вида

зачем? ну ищут у вас таким образом прокси - не срабатывает же?
 

Цитата:
где не так?

вы запрещаете все, что НЕ такое
то есть все запросы, которые не начинаются с http://(www.)?site.nsk.ru/
то есть все, что не GET http://(www.)?site.nsk.ru/

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:24 02-05-2014 | Исправлено: Cheery, 01:25 02-05-2014
perdun



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

Цитата:
вы запрещаете все, что НЕ такое
то есть все запросы, которые не начинаются с http://(www.)?site.nsk.ru/
то есть все, что не GET http://(www.)?site.nsk.ru/

ага, именно так и хочу запретить
тоесть, допустимым являются ТОЛЬКО  
http://www.site.nsk.ru/wp-content/themes..
http://site.nsk.ru/wp-content/themes..

Цитата:
зачем? ну ищут у вас таким образом прокси - не срабатывает же?

да как-то.. начинаю в этом сомневаться.. бывает и 200-й код..
этот вордпресс толи еще решето..
я их пакетным фильтром по разным хитрым критериям рубаю..
таблицы через край уже..  

Всего записей: 1499 | Зарегистр. 21-01-2004 | Отправлено: 01:52 02-05-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
perdun
вы не совсем понимаете как работает http или mod_rewrite
имя хоста передается в параметре host в http запросе, не в том, что идет в строке начинающейся с GET, POST и так далее.
поэтому нужно, как раз, просто сделать как  
 
RewriteRule !^http:// - [F]
 

Цитата:
да как-то.. начинаю в этом сомневаться.. бывает и 200-й код..  

и что? не срабатывает - сайт выдает первую страницу по умолчанию.
сработает только при специальной настройке сервера или же скрипта, который будет запускаться, брать URL и скачивать его, отдавая как ответ на запрос.
 

Цитата:
этот вордпресс толи еще решето

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

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:03 02-05-2014 | Исправлено: Cheery, 02:09 02-05-2014
perdun



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

Цитата:
RewriteRule !^http:// - [F]

неа, так же, всем подряд - форбидден..

Цитата:
217.118.79.42 - - [02/May/2014:08:29:54 +0700] "GET /?page_id=225 HTTP/1.1" 403 202
115.148.177.244 - - [02/May/2014:08:30:07 +0700] "GET http://edge.quantserve.com/quant.js HTTP/1.0" 403 210
216.245.214.82 - - [02/May/2014:08:30:28 +0700] "CONNECT www.ticketmaster.com:443 HTTP/1.1" 403 202
82.146.39.86 - - [02/May/2014:08:30:39 +0700] "POST http://copylancer.ru:80/com_user/login HTTP/1.0" 403 216
93.120.211.148 - - [02/May/2014:08:30:43 +0700] "GET http://chek.zennolab.com/proxy.php HTTP/1.1" 403 211

первая строчка, по идее должна пройти.. остальные - враги
может быть пойти не от противного..?

Цитата:
автообновление - очень удобная вещь.
 

ага, удобная.. и работало как раз вот до таких "вражеских" запросов, потом перестало..
до этого вообще не было таких запросов с хттп, тем более CONNECT..
подозреваю худшее

Цитата:
или же скрипта, который будет запускаться, брать URL и скачивать его, отдавая как ответ на запрос.  


Всего записей: 1499 | Зарегистр. 21-01-2004 | Отправлено: 05:57 02-05-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
perdun

Цитата:
неа, так же, всем подряд - форбидден..  

опечатался - уберите ! оттуда

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 06:02 02-05-2014
perdun



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
неа, враг проходит, как и раньше
надо как-то к домену вязать наверно..
 
лог апача
180.251.245.29 - - [02/May/2014:14:50:20 +0700] "GET http://www.baidu.com/ HTTP/1.1" 200 44
 
лог мода
180.251.245.29 - - [02/May/2014:14:50:20 +0700] [www.baidu.com/sid#802903128][rid#8029e30a0/initial] (2) init rewrite engine with requested uri /
180.251.245.29 - - [02/May/2014:14:50:20 +0700] [www.baidu.com/sid#802903128][rid#8029e30a0/initial] (3) applying pattern '^http://' to uri '/'
180.251.245.29 - - [02/May/2014:14:50:20 +0700] [www.baidu.com/sid#802903128][rid#8029e30a0/initial] (1) pass through /

Всего записей: 1499 | Зарегистр. 21-01-2004 | Отправлено: 12:15 02-05-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
perdun
ну, как видете, апач умнее и сам все обрезает.
мне можно было сразу догадаться, так как иначе бы выдавал не страницу с 200.
 
может быть можно проверять в RewriteCond - для %{REQUEST_URI}, но не нужно все это.


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:00 02-05-2014
perdun



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

Цитата:
ну, как видете, апач умнее и сам все обрезает.
мне можно было сразу догадаться, так как иначе бы выдавал не страницу с 200.
 

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

Цитата:
сработает только при специальной настройке сервера или же скрипта, который будет запускаться, брать URL и скачивать его, отдавая как ответ на запрос
не исключаю..
 
плз, помогите с кондишном
так  

Код:
#RewriteCond %{REQUEST_URI} ^http://
RewriteCond %{REQUEST_URI} ^/
RewriteCond %{REQUEST_URI} !^/wp(.*)
 
#RewriteRule ^http:// - [F]
RewriteRule (.*) - [F]
#RewriteRule !^/ - [F]

всем 403..
 

Всего записей: 1499 | Зарегистр. 21-01-2004 | Отправлено: 18:30 03-05-2014 | Исправлено: perdun, 18:34 03-05-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
perdun

Цитата:
сквида замечено установление пира с удаленным хостом..  

для этого у него должна быть авторизация, конечно же.

Цитата:
чекеры\брутфорсеры на сквиду

но они не сработают, так как отвечает то апач.
вполне возможно, что до обработки в mod_rewrite он удаляет/преобразует все ненужное.
 
далее.. попробуйте с "чистым" запросом, как  
RewriteCond %{THE_REQUEST} ^(GET|POST) http://


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:26 03-05-2014
perdun



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

Цитата:
для этого у него должна быть авторизация, конечно же.

само собой она есть. там в логе как раз и видно, что пихается хэш, и, как правило, дропается фаером по частоте "пихания"..
но, видимо, бывает, что и подходит (ибо пасс децкий), раз пир устанавливается..
 
не могу понять, толи движок прохачили, толи mod_proxy..
к сквиде снаружи, ессно, нет доступа, значит атака изнутри..
 
пробывал варианты

Код:
RewriteCond %{THE_REQUEST} ^(GET|POST)http://
#RewriteRule !^http://(www\.)site(.*) - [F]
RewriteRule ^(.*) - [F]

но хттп проходит с любым правилом..
 
можно как-то продиагностировать, что в этих переменных в реальном времени?
 
 
Добавлено:
Cheery

Цитата:
для этого у него должна быть авторизация, конечно же.

само собой она есть. там в логе как раз и видно, что пихается хэш, и, как правило, дропается фаером по частоте "пихания"..
но, видимо, бывает, что и подходит (ибо пасс децкий), раз пир устанавливается..
 
не могу понять, толи движок прохачили, толи mod_proxy..
к сквиде снаружи, ессно, нет доступа, значит атака изнутри..
 
пробывал варианты

Код:
RewriteCond %{THE_REQUEST} ^(GET|POST)http://
#RewriteRule !^http://(www\.)site(.*) - [F]
RewriteRule ^(.*) - [F]

но хттп проходит с любым правилом..
 
можно как-то продиагностировать, что в этих переменных в реальном времени?

Всего записей: 1499 | Зарегистр. 21-01-2004 | Отправлено: 20:53 04-05-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
perdun

Цитата:
RewriteCond %{THE_REQUEST} ^(GET|POST)http://  

там пробел между ) и http

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:02 07-05-2014
perdun



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

Цитата:
там пробел между ) и http

RewriteCond: bad flag delimiters
может экранировать пробел?
 
 
Добавлено:
вопрос начинает выходить за рамки..
но вот включение реврайта никак не влияет на это

Код:
GET http://ib.adnxs.com/ttj?id=2170228&size=160x600&cb=[CACHEBUSTER]&referrer=[REFERRER_URL]&pubclick=[INSERT_CLICK_TAG] HTTP/1.0" 403 205

апач конечно реагирует правильно вроде бы..
но надо что-то делать.. что это за атака может быть..?

Всего записей: 1499 | Зарегистр. 21-01-2004 | Отправлено: 10:29 07-05-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
perdun

Цитата:
RewriteCond: bad flag delimiters  
может экранировать пробел?

ну да, запишите как \пробел
 

Цитата:
но надо что-то делать.. что это за атака может быть.

да что же вы так реагируете то на все?  
это явно бот, возможно ищут прокси или способы для накрутки счетчика/трафика в баннерной сети.
 
насчет сквида - смотрите откуда идут подключения, там и копайте.
по умолчанию в апаче вообще лучше не использовать mod_proxy - для этого есть такие вещи, как nginx, к примеру.
а если используете, то настраивайте так, чтобы не пропускало все подряд.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:38 07-05-2014
gruslava

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть задача убрать index.php из текста запроса в движках или даже при обращении к главной странице через /index.php вместо /. Если делать это простым redirect 301, то возникает циклический редирект, т.к. движки часто имеют свои правила работы через index.php
 
Применил такую конструкцию:

Код:
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]

 
Она работает, но при этом страница возвращает код ответа 200 OK вместо 301 Permanent redirect.
 
Может ли кто-то подсказать, что с этим делать? код редиректа очень важен.

Всего записей: 52 | Зарегистр. 19-10-2004 | Отправлено: 13:34 24-07-2014
drrdar

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем доброго!  
 
Надеюсь, написал в ту тему.  На самом деле, мне для mod_rewrite .htaccess'ного надо, кривые сцылки переправить, дубли закрыть. Сразу скажу, чтобы тапками не кидали, с регекспами мало знаком, в основном - каюсь - совсем уж простецкими решениями пользуюсь по необходимости, которых в интернете тоннами выложено. Хотя можете и кинуть, чего уж. ))  
 
В общем, корявый битрикс выдаёт, как выяснилось, хренову тучу дублей, т.о., сайт ни фига не двигается в поисковиках.  
 
Неправильный УРЛ выглядит вот так:  
 
http://examp.le/catalog/detail.php?id=777&section_id=string1&cat=789  
 
На самом деле, это дубль, и вместо string1 нужно конкретное число, например, 123. А вместо 777 м.б. любая последовательность из 3-х цифр. Соотв., с этой кривой ссылки нужен редирект на  
 
http://examp.le/catalog/detail.php?id=777&section_id=123&cat=789  
 
Почитал, что с помощью QUERY_STRING такое должно парситься. Что-то типа  
 
RewriteCond %{QUERY_STRING} ^section_id=(string1)&cat=789$  
 
RewriteRule ^catalog/detail.php?id=([0-9]{1,3})& http://examp.le/catalog/detail.php?id=$1&section_id=123&cat=125  
 
Естественно, ни фига не работает, ибо тёмный лес вообще.  
 
Благодарю за любую помощь!

Всего записей: 25 | Зарегистр. 06-03-2008 | Отправлено: 13:06 09-09-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
drrdar
зачем вам mod_rewrite в данном случае? добавляете кусок php кода в detail.php, в котором смотрите значения id и section_id, после чего делаете 301 переадресацию с помощью функции header

Всего записей: 15113 | Зарегистр. 20-09-2014 | Отправлено: 23:19 21-09-2014
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 70 71

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


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru