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

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



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
сделал новый двиг сайта, а старые адреса прописал в хтаксес
такое правило не срабатывает

Код:
RewriteRule ^i.php?p=uf4$ /article/upakbiznes/upakbiznes4/ [L]

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

Всего записей: 31 | Зарегистр. 05-10-2006 | Отправлено: 13:12 22-01-2009
Zakkazak



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу прощения если вопрос не относиться к этой ветке, модер сюды отсылает подобные вопросы:
Надо преобразовывать урл из Википедии в читабельный вид, например
из
http://ru.wikipedia.org/wiki/%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B2%D1%8B%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA
в
http://ru.wikipedia.org/wiki/Скриптовый_язык
 
Нужна таблица которую собираюсь вскормить Offline Explorer

Всего записей: 995 | Зарегистр. 12-01-2005 | Отправлено: 01:51 26-01-2009
Cheery



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

Цитата:
Нужна таблица которую собираюсь вскормить Offline Explorer

таблица чего?  

Цитата:
модер сюды отсылает подобные вопросы

и где и куда вас посылал?  
 
 
просто не пойму при чем тут mod_rewrite?
то, что по первой ссылке, как раз правильно url encoded.
вот вам таблица..
http://urlencode.it/url/characters/
хотите с русскими символами? ок
набейте такой код в странице с русской кодировкой

Код:
for (var i=0; i<256;i++)
document.write(i+":"+String.fromCharCode(i)+'='+escape(String.fromCharCode(i))+"<br>")


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:17 26-01-2009
Zakkazak



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
По этой ссылке забрел сюда как сделать url аналогичный википедии?..
Спрошу в другом месте

Всего записей: 995 | Зарегистр. 12-01-2005 | Отправлено: 14:10 26-01-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Zakkazak
я просто не совсем понимаю в чем проблема то? что там, что тут..

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 17:06 26-01-2009
Zakkazak



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос не совсем по програмированию:
Offline Explorer при закачке может автоматически сохранять страницы с другим именем. Ему просто надо указать какие символы менять чем. Таблиц сотворил в ручную вбил эти адреса в строку и браузер возвратил мне их эквиваленты
http://ru.wikipedia.org/wiki/А_БВГДЕЁЖХИЙКЛМНОПРСТУХФЦЧШЩЪЫЬЭЮЯ
http://ru.wikipedia.org/wiki/а_бвгдеёжхийклмнопрстухфцчшщъыьэюя
Подробнее...

Всего записей: 995 | Зарегистр. 12-01-2005 | Отправлено: 18:05 26-01-2009
wyxa



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребят, помогите справиться с проблемой.
Есть ссылки вида
http://www.site1.com/index.php?a=param1&b=param2
 
Нужно чтобы перебрасывало на
http://www.site2.com/index.php?l=ru&a=param1&b=param2
 
Я создал .htaccess и закинул его в корневую папку site1.com:
Код:
RewriteEngine on
RewriteRule ^index.php?(.*)$ http://www.site2.com/index.php?l=ru&$1 [R=301]

Но в результате перебрасывается просто на http://www.site2.com/index.php?l=ru без параметров.
Выражение $1 выдаёт пустую строку.
 
Кстати, с экранированным символом \? — ^index.php\?(.*)$ вообще не работает почему-то. Экранировать нельзя?

Всего записей: 614 | Зарегистр. 16-10-2007 | Отправлено: 06:15 28-01-2009 | Исправлено: wyxa, 06:19 28-01-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
wyxa
что вам мешает перебрасывать тем же index.php??
 
mod_rewrite в таком виде не работает с query string
хотите полностью перенести - смотрите на флаг QSA (query string append)

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 06:20 28-01-2009
wyxa



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

Цитата:
что вам мешает перебрасывать тем же index.php??

Дело в том, что таких «index.php» много, и каждый править лень.

Цитата:
хотите полностью перенести - смотрите на флаг QSA (query string append)

А вот это помогло! Спасибо!
Решение такое:
RewriteRule ^index.php$ http://www.site2.com/index.php?l=ru [QSA,R=301]

Всего записей: 614 | Зарегистр. 16-10-2007 | Отправлено: 06:32 28-01-2009 | Исправлено: wyxa, 06:34 28-01-2009
Cheery



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

Цитата:
не срабатывает по идее из-за знака вопоса, его в этом месте нужно экранировать? и как?

нужно делать RewriteCond на %{QUERY_STRING}

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 06:47 28-01-2009
wyxa



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я сделал перенаправление 301 с одного сайта на другой. Но проблема в том, что параметры в адресах страниц одного сайта в некоторых случаях различаются.
 
Можно ли сделать, чтобы перенаправление осуществлялось по списку
 
Нап
www.site1.com/index.php?a=1&b=2&c=3  
меняется на  
www.site2.com/index.php?a=4&b=2&c=22  
с перенаправлением 301.
 
Общего правила нет, просто я задаю точный список замен. Можно ли это сделать при помощи mod_rewrite? Предполагаю, что надо использовать %{QUERY_STRING}. Подскажите, как это сделать.
 
Проблема связана с поисковой системой. Она проиндексировала страницу со старыми параметрами, а сейчас параметры уже изменились. И при поиске находятся страницы с неверными параметрами, соотвественно отображается каша. Страниц таких немного совсем.
Конечно, для правильного отображения можно исправить сам index.php.
Однако, мне нужно, чтобы адрес с неверными параметрами исчез из результатов поиска (заменился на новый). Насколько я знаю, для этого нужно проставить перенаправление с кодом 301.

 
Добавлено:
Вроде как можено и без mod_rewrite обойтись, тогда прошу прощения за офф-топ.
Решение — правим php-файл и при определённых условиях вставляем:
Код:
<?
Header( "HTTP/1.1 301 Moved Permanently" );  
Header( "Location: http://www.new-url.com" );  
?>

А всё же через mod_rewrite решение есть?

Всего записей: 614 | Зарегистр. 16-10-2007 | Отправлено: 07:32 28-01-2009 | Исправлено: wyxa, 07:33 28-01-2009
Cheery



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

Цитата:
Общего правила нет, просто я задаю точный список замен. Можно ли это сделать при помощи mod_rewrite? Предполагаю, что надо использовать %{QUERY_STRING}. Подскажите, как это сделать

можно, но не проще ли в index.php??
ок.. как и сказал выше - используйте RewriteCond на %{QUERY_STRING}
 


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:43 28-01-2009
federikkoII

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нужна помощь, второй день голову ломаю Не могу RewriteRule написать..  
 
надо из ссылки вида - http://test.ru/foto/off.png
 
сделать http://test.ru/debag.php?id=http://test.ru/foto/off.png

Всего записей: 3 | Зарегистр. 04-03-2009 | Отправлено: 16:00 04-03-2009
Cheery



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

Цитата:
Нужна помощь, второй день голову ломаю

до кучи же примеров выше похожих.
 
для одной только ссылки или для всех?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:57 04-03-2009
federikkoII

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Для всех ссылок реврайт на http://test.ru/debag.php?id=(полный путь до файла)
 
RewriteRule ^(.*) http://www.test.ru/counter.php?id=$1&% так в ID вытаскивается имя файла
 
RewriteRule ^(.*) http://www.test.ru/counter.php?id=$1&%{QUERY_STRING} [L]  и так имя файла что я не так делаю :-[
 
 
Перелопатил всё, ничего не получается, максимум имя файла могу вытащить, а надо полный путь до файла Помогите, ткните в нужное место третьи сутки эксперементирую

Всего записей: 3 | Зарегистр. 04-03-2009 | Отправлено: 02:36 05-03-2009
Cheery



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

Цитата:
а надо полный путь до файла

что значит "полный путь"? в обработке вот так его нет
комибинируйте из доступных переменных
%{HTTP_HOST} %{SERVER_PORT}  + %{REQUEST_URI}

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 04:19 05-03-2009
federikkoII

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

Всего записей: 3 | Зарегистр. 04-03-2009 | Отправлено: 15:18 05-03-2009
usertum



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалуйста, как использовать имя каталога в чпу.
 
Пример:
RewriteRule ^reg/reg.html$ http://127.0.0.1/index.php?reg=reg [L]
 
После данного запроса на сайте все запросы на картинки скрипты итд идут на каталог reg/images итд, другими словами http://127.0.0.1/index.php?reg=reg преобразуется в http://127.0.0.1/reg/index.php?reg=reg соответственно путь становится не верным, пропадает графика, таблицы стилей css итд. Если использовать ЧПУ RewriteRule ^reg.html$ http://127.0.0.1/index.php?reg=reg то все отлично. Как указывать каталог в чпу, что бы получить http://127.0.0.1/reg/reg.html ?

Всего записей: 471 | Зарегистр. 01-07-2008 | Отправлено: 21:40 21-03-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
usertum
перед этим написать
RewriteBase /reg
и потом

Цитата:
RewriteRule ^reg.html$ http://127.0.0.1/index.php?reg=reg  

 
 
либо, все же, писать так
RewriteRule ^/reg/reg.html$

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:44 21-03-2009 | Исправлено: Cheery, 21:45 21-03-2009
usertum



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

Цитата:
RewriteRule ^/reg/reg.html$
я так писал, тогда все пути меняются на /reg/ у скриптов, картинок итд.
 
А если прописать так, RewriteBase /reg а каталогов будет несколько?
 
Добавлено:
Пример, путь http://127.0.0.1/reg/up/avatar стало, а должно быть http://127.0.0.1/up/avatar...
 
RewriteBase /reg - не помогло.

Всего записей: 471 | Зарегистр. 01-07-2008 | Отправлено: 21:48 21-03-2009 | Исправлено: usertum, 21:51 21-03-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