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

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



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
crimea360
отрицание ! должно стоять перед ^

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:31 28-07-2009
saharito

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу помочь .. не могу сделать читабельную ЮРЛ
вот из этого хочу сделать .
/index.php?&direction=0&order=&directory=Book
в
/book
 
мой код , что не правильно я прописал ?
RewriteRule ^([A-Za-z0-9-]+) /$ index.php?&direction=0&order=&directory=$ 1 [R]

Всего записей: 11 | Зарегистр. 21-09-2008 | Отправлено: 09:42 11-08-2009
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
saharito
Пробелы лишние, да и флаг R лучше убрать:

Код:
RewriteRule ^([A-Za-z0-9-]+)/$ index.php?&direction=0&order=&directory=$1

 
 

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 10:05 11-08-2009
saharito

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сделал  , ошибку не выдает как  раньше но и не сработал . .  
http://www.***.ru/upload/index.php?&direction=0&order=&directory=game

Всего записей: 11 | Зарегистр. 21-09-2008 | Отправлено: 10:21 11-08-2009 | Исправлено: saharito, 10:21 11-08-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
saharito
ваша регулярка для пути закрытого слэшем. Обращаетесь изначально по нему?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 10:23 11-08-2009
saharito

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Не понял поточнее куда обратиться ?

Всего записей: 11 | Зарегистр. 21-09-2008 | Отправлено: 10:26 11-08-2009
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
saharito
Имеется в виду, что пробовать надо URL
 
http://www.***.ru/book/

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 10:31 11-08-2009
saharito

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
По данному адресу у меня форум ... а здесь у меня обменник /upload/
а если попать в папку гаме то выдает вот такое
index.php?&direction=0&order=&directory=game
мне надо обменник сделать читабельным , а потом закрыть от скачивания другими форумами . А то посещаемости нету , а нагрузка идет .. уже просто устал писать чтобы не выкладывали на другие ресурсы прямые ссылки на скачивание .  
 
Добавлено:
я .htaccess кидаю на на форум  , а на аплауд .. /upload/ или что-то я туплю .. ?
 
Добавлено:
RewriteEngine On
RewriteRule ^([A-Za-z0-9-]+)/$ index.php?&direction=0&order=&directory=$1

Всего записей: 11 | Зарегистр. 21-09-2008 | Отправлено: 10:35 11-08-2009
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
saharito
Судя по всему, вам требуется антилич. На форуме есть специальная ветка с обсуждением защиты ссылок.

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 10:54 11-08-2009
saharito

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dacuan
спасибо но мне уже давал Cheery эту ссылку . Там половино уже умерли ... да если я бы былбы профи в PHP то думаю прикрутил-бы капчу .  
Може есть где нибуть мод или чтонить для движка  Powered by PHP Advanced Transfer Manager v1.30 ? может где это обсуждалось ... а то гуглил да яндексил толку ноль .  
Только самое главное поподал на свои-же вопросы .. хаха .  

Всего записей: 11 | Зарегистр. 21-09-2008 | Отправлено: 15:12 11-08-2009
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
saharito
Вот здесь есть статьи с подробным разбором, как делать каптчу. А с движком этим я не знаком, так что ничего подсказать не могу.

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 15:41 11-08-2009
saharito

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dacuan
Благодарю и на этом !  буду значит закрывать пасом аплауд ! PHP плохо знаю .. учимся только .  
P.S Могу написать не сложный сайт на PHP с базой ... но в чужом коде пока сложновато разбираться .

Всего записей: 11 | Зарегистр. 21-09-2008 | Отправлено: 16:03 11-08-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
saharito
я же сказал, что надо сделать для защиты - проверяйте с помощью mod_rewrite реферера.
в большинстве случаев он не режется
 

Цитата:
RewriteEngine On
RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?&direction=0&order=&directory=$1



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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:20 11-08-2009
blacks666

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ищутся добрые люди  готовые помочь!
 
3и или 4е сутки не могу собрать следу штуку :
 
 
ЗАДАЧА:
При заходе на site.spb.ru  по установленным кукам посетитель перенаправлялся
на один из субдоменов и там оставался. Позже добавить на весь сайт редиект
«с www» на «без www».
 
 
ПОДРОБНЕЙ:
Пользователь заходит на site.spb.ru
В корне сайта лежит htaccess
 

Код:
RewriteEngine On
RewriteBase /
 
# субдомены – построены по правилам моего хостера
    RewriteCond %{HTTP_HOST} (www\.)?sub1\.site.\spb\.ru$
    RewriteCond %{REQUEST_URI} !^(/)? sub1/
    RewriteRule ^(.*)$ sub1/$1
 
    RewriteCond %{HTTP_HOST} (www\.)? sub2\. site.\spb\.ru$
    RewriteCond %{REQUEST_URI} !^(/)? sub2/
    RewriteRule ^(.*)$ sub2/$1
 
# прочитать значение куки и перенаправить на субдомен указанный в куки
    RewriteCond %{HTTP_COOKIE} setting=([^;]+) [NC]
    RewriteRule ^(.*)$ http://%1.site.spb.ru/ [R=302,QSA,L]

 
 
1. Если куки установлены то в зависимости от них идет перенаправление на
sub1.site.spb.ru или sub2.site.spb.ru
 
2. Если куков нет то ждется переход от пользователя на sub1.site.spb.ru или sub2.site.spb.ru
Где и ставятся куки.
 
 
 
ПРОБЛЕМА:  
Редирект по куки на на субдомены идет но с ошибкой:
 
«Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится.»
«Эта проблема может возникать при отключении или запрещении принятия cookies.»

 
 
Все вышесказанное работает на  
виртуальном хостинге, PHP не используется, JavaScript тоже, остальные скрипты тоже
- Только META теги, htaccess, html !
 
 
 
Саппорт хостинга предложил что-то непонятное но вроде правдивое:
 
«Объясняю на примере
Итак, посетитель заходит на site.spb.ru, оттуда идет на страницу /sub1
Сейчас по умолчаню ему выдается cookie, а надо бы проверить реферер
Если реферрер НЕ sub1.site.spb.ru, то выдаем cookie и редиректим на поддомен
 
Поскольку посетитель новый, его перенаправили на поддомен
Итак, мы попадаем на ту же самую страницу. Но повторного редиректа не происходит,
поскольку этому мешает реферрер.»

 
 = Пробовал закрывать по рефералу -  не сработало

Код:
RewriteCond %{HTTP_REFERER} ^http://(www\.)?en\.site\.spb\.ru/index.html$ [NC,OR]

 
 
 
Кто может, помогите решением!
Если необходимо могу приаттачить в zip весь пример.
 
Помогите пожалуйста!

Всего записей: 19 | Зарегистр. 30-08-2008 | Отправлено: 03:33 16-08-2009
andrewtishkin



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как сделать так, чтобы всё что запрашивается по example.com/aaa/bbb выдавало то же самое, что и по адресу example.com/aaa/bbb/ccc/?
 
Допустим открываем example.com/aaa/bbb/hello.php
А получаем то, что можно открыть и по example.com/aaa/bbb/ccc/hello.php
 
Я вот сразу соорудил вот такую конструкцию
 
RewriteEngine on
RewriteBase /
RewriteRule ^aaa/bbb/(.*)$ aaa/bbb/ccc/$1
 
Но результата не получил... Теперь сижу строю чёрт знет что, уже и R, P, L перепробовал, кучу кобинаций, но только запутался ещё больше
 
Помогите кто-нибудь please

Всего записей: 781 | Зарегистр. 28-08-2008 | Отправлено: 01:49 17-08-2009 | Исправлено: andrewtishkin, 03:28 17-08-2009
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
andrewtishkin
Включите журналирование и покажите код здесь
 
blacks666
Попробуйте добавить условие в последний блок

Код:
# прочитать значение куки и перенаправить на субдомен указанный в куки  
    RewriteCond %{HTTP_HOST} ^(www\.)?site\.spb\.ru$
    RewriteCond %{HTTP_COOKIE} setting=([^;]+) [NC]  
    RewriteRule ^(.*)$ http://%1.site.spb.ru/ [R=302,QSA,L]

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 10:36 17-08-2009
andrewtishkin



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

Цитата:
Включите журналирование и покажите код здесь

Я уже вроде решил проблему. В приведённом варианте там будет бесконечное зацикливание. Избавиться я от него не смог, просто переименовал одну папку, чтобы Apache по кругу не ходил. Конечно, не совсем то, что хотелось, но всё же
 
Но насчёт борьбы с такими бесконечными циклами если есть у кого-то опыт - поделитесь мнением. Интересно почитать

Всего записей: 781 | Зарегистр. 28-08-2008 | Отправлено: 04:22 18-08-2009
dacuan

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

Цитата:
Но насчёт борьбы с такими бесконечными циклами если есть у кого-то опыт - поделитесь мнением. Интересно почитать

Каждый случай уникален У вас можно попробовать добавить дополнительное условие:

Код:
RewriteEngine on  
RewriteBase /  
 
RewriteCond %{REQUEST_URI}  !^aaa/bbb/ccc/
RewriteRule ^aaa/bbb/(.*)$ aaa/bbb/ccc/$1


Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 10:21 18-08-2009
Mouzes



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем трям. Мы тут поднимаем сетевой ДС портал, и есть некоторые сложности. Хотелось бы сразу поблагодарить грамотных и чутких модераторов (Cheery), с его помощью мы вообще старенький двиган запустили. Ситуация такая:
 
Сам домен: http://balnet.ru  
 
Портал поднимаем в подпапке /portal http://balnet.ru/portal
 
Ссылки на новости, псоле обработки выдаются такие: http://balnet.ru/portal/news/2009/08/20/test/#full  
 
на категории такие: http://balnet.ru/portal/news/
 
Искал в этой теме тех, кто уже сталкивался с подобным, 27 страниц и ещё щас буду читать но пока не нашёл.
Нам ничего не нужно изменять\обрабатывать и т.д., просто чтобы стали открываться нвости. .htaccess - пока в таком виде:
 
DirectoryIndex index.html index.php category.php
 
RewriteEngine on  
RewriteBase /  
RewriteCond %{REQUEST_URI}  !aaa/bbb/(.*)$
RewriteRule ^aaa/bbb/(.*)$ aaa/bbb/(.*)$
 
(это добавил: RewriteCond %{REQUEST_URI}  !aaa/bbb/(.*)$
RewriteRule ^aaa/bbb/(.*)$ aaa/bbb/(.*)$
после того как увидел в логах, что он просил добавить)
 
 
Лог включил, сыпется:
 
217.147.31.10 - - [21/Aug/2009:11:57:05 +0400] [balnet.ru/sid#2b9073069d30][rid#2b9073458228/subreq] (3) [perdir /var/www/html/portal/] strip per-dir prefix: /var/www/html/portal/index.php -> index.php
217.147.31.10 - - [21/Aug/2009:11:57:05 +0400] [balnet.ru/sid#2b9073069d30][rid#2b9073458228/subreq] (3) [perdir /var/www/html/portal/] applying pattern '^aaa/bbb/(.*)$' to uri 'index.php'
217.147.31.10 - - [21/Aug/2009:11:57:05 +0400] [balnet.ru/sid#2b9073069d30][rid#2b9073458228/subreq] (1) [perdir /var/www/html/portal/] pass through /var/www/html/portal/index.php
 
"pass through" - "проходят через"
 
А вот что просит, ума не проложу...

Всего записей: 59 | Зарегистр. 19-10-2006 | Отправлено: 11:11 21-08-2009 | Исправлено: Mouzes, 06:13 22-08-2009
Cheery



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

Цитата:
А вот что просит, ума не проложу...

кто "просит"? пишет просто что запрос не подходит ни под одно из правил и поэтому проходит напрямик.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:16 22-08-2009
Открыть новую тему     Написать ответ в эту тему

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