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


Система 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
Mafia80



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите, стоит ЧПУ, доступа к htaccess пока нет, обещают в скором времени.
 
Смысл в том чтобы определенные страницы на старом сайте (old.ru) были доступны по прямым ссылкам поисковика c нового сайта (new.ru). пути не пересекаются.
 
Например надо чтобы при запросе страницы new.ru/articles/view/10.html (которой не существует), открывалась страница на old.ru/articles/view/10.html.. при этом надо чтобы было все максимально прозрачно как если бы это открывалось на первоначальном сайте.
 
как пример мне дали код вида:
RewriteRule /articles/view/(.*).html http://domain.com/articles/view/$1.html [R=301,L]
 
так же надо будет дописать правила для других папок, включая прямые уникальные без ЧПУ..
/articles/?page=3
/about.html
/discounted/?page=2&type=discounted

Всего записей: 1248 | Зарегистр. 13-06-2005 | Отправлено: 17:36 12-10-2015 | Исправлено: Mafia80, 14:53 15-10-2015
Sutar



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть такой готовый код:
 
 

Код:
RewriteRule ^(page1|page2|page3)(|/(|([0-9]+)))$ page.php?page=$1&id=$3 [NS,L]

 
В результате, можно открыть ссылки:
../page1
../page1/
../page1/783

 
но тут есть баг, можно открыть и ссылку такого вида: ../page1// и даже такого: ../page1///
Нужно сделать так, чтоб были доступны только первые 3 варианта (просто page1, с / и с / и числом), но никак не с // или /// и т.д.

Всего записей: 1140 | Зарегистр. 15-08-2011 | Отправлено: 12:29 12-05-2016
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar
 
Попробуй так:
 

Код:
RewriteRule ^(page[123])(/([0-9]*))?$ page.php?page=$1&id=$3 [NS,L]

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 15:28 12-05-2016
Sutar



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dacuan
работает так-же. Ничего не изменилось.
Пробовал ещё следующие комбинации, но тоже не помогает.
 

Код:
^(top|vip|boost|color)[/]?([0-9]*)$
^(top|vip|boost|color)[/]{0,1}?([0-9]*)$

 
даже банально в таком запросе:

Код:
^text-info/([0-9]+)$

 
можно открыть URL: ../text-info////////////////398

Всего записей: 1140 | Зарегистр. 15-08-2011 | Отправлено: 19:01 13-05-2016 | Исправлено: Sutar, 19:34 13-05-2016
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar
 
Нужен детальный лог, включи RewriteLogLevel 9, открой только URL ../text-info////////////////398 и выложи куда-нибудь. Не надо открывать много урлов, только один, лог и без того будет большим.

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 20:01 13-05-2016
Mavrikii

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

Цитата:
можно открыть URL: ../text-info////////////////398

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

Всего записей: 4960 | Зарегистр. 20-09-2014 | Отправлено: 20:24 13-05-2016
Sutar



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Попробуйте даже в ВК такое проделать.
Например ../vk.com///////////id1234 - Запрос обрабатывается тоже корректно. Или это изза моего брандмауэра. (Opera 37.0)
 
Добавлено:
Хотя в EI6 - тоже так можно проделать. Практически на каждом сайте, где используется Rewrite

Всего записей: 1140 | Зарегистр. 15-08-2011 | Отправлено: 20:47 13-05-2016
Mavrikii

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

Цитата:
Или это изза моего брандмауэра.

браузер и брэндмауэр (файерволл) - разные вещи.
 
сейчас протестирую
 
ps: дела были.. апач 2.4
 
добавил в .conf
        RewriteEngine On
        RewriteRule ^/?(page[1-3])(/[0-9]*)?$ /test.php?page=$1&id=$2 [NS,L]
 
тестирую
http://127.0.0.1/page2 - OK
http://127.0.0.1/page2/12 - OK
http://127.0.0.1/page2//12 - The requested URL /page2//12 was not found on this server.
 
 
так что проблема не в реализации mod_rewrite, а в настройке сервера (а если везде, то может у вас прокся сидит и меняет запрос)
или перехватывает иное правило в другом месте - включаем логгирование и смотрим как обрабатывается запрос.

Всего записей: 4960 | Зарегистр. 20-09-2014 | Отправлено: 20:59 13-05-2016 | Исправлено: Mavrikii, 22:18 13-05-2016
Sutar



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
а такой запрос тоже не работает с // или больше слешами?
 

Код:
page/([0-9]+)

Всего записей: 1140 | Зарегистр. 15-08-2011 | Отправлено: 12:05 14-05-2016
Mavrikii

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar
Да
Только если Апач или что то перед ним выставляют запрос, удаляя лишнее.
Может весь ваш инет идет через прокси у провайдера.

Всего записей: 4960 | Зарегистр. 20-09-2014 | Отправлено: 15:52 14-05-2016
JekaRus

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Возможно ли заблокировать доступ к сайту с определенных браузеров?  
Пробовал запретить вход с Firefox таким конфигом  
RewriteEngine On  
RewriteCond %{HTTP_USER_AGENT} ^Mozilla* [NC,OR]  
RewriteCond %{HTTP_USER_AGENT} ^Firefox* [NC]  
RewriteRule ^login.php$ /111.html  
   
Но почему-то редирект происходит со всех браузеров, например Opera и Chrom на 111.html
а не только с "Firefox 45.0 (Gecko 45.0)"

Всего записей: 1000 | Зарегистр. 10-08-2005 | Отправлено: 03:20 23-05-2016
Mavrikii

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
JekaRus
вы посмотрели как выглядит User-Agent интересуемого вас браузера? подсказываю
http://whatsmyuseragent.com/ и сюда загляните - http://www.useragentstring.com/pages/useragentstring.php
ваши правила работают с любым агентом, который начинается с mozilla или firefox

Всего записей: 4960 | Зарегистр. 20-09-2014 | Отправлено: 04:52 23-05-2016 | Исправлено: Mavrikii, 04:55 23-05-2016
JekaRus

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mavrikii
Спасибо за ссылки. А почему это и Хром и Опера определяется как Mozilla/5.0 ?
Как тогда задать чтобы только с хрома и оперы заходили?

Всего записей: 1000 | Зарегистр. 10-08-2005 | Отправлено: 10:07 23-05-2016
Mavrikii

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

Цитата:
А почему это и Хром и Опера определяется как Mozilla/5.0 ?

https://ru.wikipedia.org/wiki/User_Agent
читать раздел Искусственная несовместимость
 

Цитата:
Как тогда задать чтобы только с хрома и оперы заходили?

определять на странице и перекидывать оттуда. использовать browsercap, к примеру, или иной js скрипт.
http://browscap.org/
 
можно и с помощью mod_rewrite, нужно лишь регулярку правильно написать - у firefox есть слово, только не в начале
так что убрать ^
 
RewriteEngine On  
RewriteCond %{HTTP_USER_AGENT} Firefox [NC]  
RewriteRule ^login.php$ /111.html  
но это легко подделывается

Всего записей: 4960 | Зарегистр. 20-09-2014 | Отправлено: 10:27 23-05-2016 | Исправлено: Mavrikii, 10:31 23-05-2016
Valery ZZ



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Всем привет!
Нужна помощь.
Необходим редирект с index.php/* на корень сайта.
 
Нашел в сети такой способ:
 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://site.ru/ [R=301,L]
 
Но он редиректит только с http://site.ru/index.php
Как мне модифицировать код так, чтобы редиректил, например с http://site.ru/index.php/page ?
Т.е. со всех url содержащих index.php.
 
Или хотябы модифицировал url, исключая из него index.php, т.е. было http://site.ru/index.php/page, стало http://site.ru/page

Всего записей: 19 | Зарегистр. 04-01-2008 | Отправлено: 11:34 12-10-2016 | Исправлено: Valery ZZ, 11:44 12-10-2016
Mavrikii

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

Цитата:
RewriteRule ^index\.php/(.*)$ http://site.ru/$1 [R=301,L]  

RewriteCond тут и не нужен.

Всего записей: 4960 | Зарегистр. 20-09-2014 | Отправлено: 19:20 12-10-2016
Sutar



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет,
такой вопрос, есть такая строка:
 

Код:
RewriteRule ^(login)$ user.php?page=$1 [NS,L]

 
По идее, на сайте можно открыть адрес такого вида: ../login
Но как открыть адрес такого вида ../login?e=&t=, чтоб передавать дополнительные параметры _GET e и t?

Всего записей: 1140 | Зарегистр. 15-08-2011 | Отправлено: 23:44 04-01-2017
Mavrikii

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

Цитата:
чтоб передавать дополнительные параметры _GET e и t?

RewriteCond %{QUERY_STRING} e=(.*)&t=(.*)
порядок важен, но можно сделать несколько вариантов

Всего записей: 4960 | Зарегистр. 20-09-2014 | Отправлено: 23:57 04-01-2017
Sutar



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
а можно без правил? в примере 2 параметра а в реальности может быть больше и разные.

Всего записей: 1140 | Зарегистр. 15-08-2011 | Отправлено: 00:14 05-01-2017
Mavrikii

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

Цитата:
а можно без правил?

RewriteCond - не правило, а условие.
RewriteRule - правило.
 
нет, нельзя, иначе переменные недоступны - проще оставить скрипт login, в нем обрабатывать переменные и перекидывать куда нужно. апач не парсит get параметры - оно ему не нужно.
https://wiki.apache.org/httpd/RewriteQueryString

Всего записей: 4960 | Зарегистр. 20-09-2014 | Отправлено: 02:06 05-01-2017
Открыть новую тему     Написать ответ в эту тему

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