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

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



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

Цитата:
Как можно избавиться от этого добавления?

используйте rewriterule, а не redirectmatch
в нем тоже можно указать 301 заголовок.. например вот так [R=301,L]
 
либо смотрите порядок выполнения правил, что первым срабатывает, что вторым..

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

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я уже пробовал это делать через RewriteRule, результат тот же.
 
Мне советовали поставить это правило сразу после RewriteEngine on, однако это тоже не приводило ни к какому результату.
 
Вот весь листинг RewriteEngine
 
 
Options +FollowSymLinks
AddDefaultCharset utf-8
RewriteEngine on
 
RedirectMatch 301 ^(.*)/index.html хттп://{сайт}$1  
RedirectMatch 301 ^/dushevye_kabiny/(.*) хттп://{сайт}/catalog/dushevye_kabiny/$1  
...
 
RewriteCond %{HTTP_HOST} ^www\.{сайт2}\.{дм}$ [NC,OR]
RewriteCond %{HTTP_HOST} ^{сайт2}\.{дм}$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www\.{сайт}\.{дм}$ [NC]
RewriteRule ^(.*)$ хттп://{сайт}/$1 [R=301,L]
 
RewriteRule ^(.*)/(.*)\.html$ object.php?path=$2 [L]
RewriteRule (.*)\.html$ object.php?path=$1 [L]
RewriteRule (.*)\.(.*) $1.$2 [L]
 
RewriteCond %{DOCUMENT_ROOT}/$1 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/$1 -d
RewriteRule (.*) - [S=2]
 
RewriteRule ^(.*)$ /page.php [L]
 
Redirect 301 /dushevye_kabiny/spisok_vseh_tovarov.html  хттп://{сайт}/catalog/dushevye_kabiny/
...

Всего записей: 8 | Зарегистр. 28-04-2011 | Отправлено: 19:49 04-05-2011 | Исправлено: Schtopt, 19:51 04-05-2011
kolkazzz

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Такая проблема,
 
Есть такой файл .htaccess
 
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !parse
RewriteRule . /index.php [L]
</IfModule>
 
есть подкаталог papka
пытаюсь защитить его  
 
AuthName "user"
AuthType Basic
require valid-user
AuthUserFile "/home/user/.htpasswds/passwd"
 
 
как только добавляю пароль на папку, сразу перестают работать лежащие в ней скрипты.
отключаю и  снова все нормально.
те когда врубаю авторизацию мод_реврайт какбы "игнорит"
RewriteCond %{REQUEST_FILENAME} !-d
 и перенаправлят на index.php

Всего записей: 2 | Зарегистр. 10-05-2011 | Отправлено: 06:27 10-05-2011
vegaweb



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
у меня такая ситуевина:
был прописан мод рерайт, который делал ссылки вида: page/my_page/
сейчас я захотел сделать page/my_page.html
сделать сделать, но не могу понять как верно прописать редирект  
пробовал что то типа

Код:
 
redirect page/(.*)/ page/$1.html
 

не работает.. буду признателен за помощь.

Всего записей: 107 | Зарегистр. 13-03-2009 | Отправлено: 19:46 11-05-2011
substrackto

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

Цитата:
Код:  
redirect page/(.*)/ page/$1.html
 
 
не работает.. буду признателен за помощь.

Так ты же перенаправляешь на реальную страницу, тебе нужно наоборот прописать:
если пользователь запрашивает "page/$1.html" то показывать "page/(.*)/"

Всего записей: 93 | Зарегистр. 25-10-2007 | Отправлено: 19:50 11-05-2011
vegaweb



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

Цитата:
Так ты же перенаправляешь на реальную страницу

и новое и старое идет через рерайт

Цитата:
тебе нужно наоборот прописать

это вы наверно про мод рерайт говорите, а я хочу через редирект поисковикам делать редирект на новые урлы

Всего записей: 107 | Зарегистр. 13-03-2009 | Отправлено: 20:00 11-05-2011
Schtopt

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
@substrackto, если я правильно понял, ему нужен редирект со старых страниц на новые, а не наоборот.
 
@vegaweb, попробуй  
RedirectMatch 301 ^(.*)page/(.*)/$ http://{твой_сайт}/page/$2.html
 
Адрес, куда пенаправляешь, нужно писать полностью.

Всего записей: 8 | Зарегистр. 28-04-2011 | Отправлено: 20:18 11-05-2011
vegaweb



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Schtopt
 
попробовал
получил  
http://site.ru/page/reklama_na_sajte.html?id=reklama_na_sajte

Всего записей: 107 | Зарегистр. 13-03-2009 | Отправлено: 20:23 11-05-2011
Schtopt

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Оу, у меня тоже была подобная проблема. (Несколько сообщений выше)
 
Смотри правила RewriteRule, чтобы там совпадала вложенность, т.е. для
 
RedirectMatch 301 ^(.*)page/(.*)/$ http://{твой_сайт}/page/$2.html
 
нужно  
 
RewriteRule ^page/(.*)\.html$ {здесь твоя пхп станица с параметром} [L]
 
Пробуй.
 
P.S. Чтобы не было этого хвоста нужно, чтобы количество слешей здесь
 
http://{твой_сайт}/page/$2.html
 
и здесь
 
^page/(.*)\.html$
 
совпадало, но учти что во второй части путь указывается без основного хоста (без http://{твой_сайт})

Всего записей: 8 | Зарегистр. 28-04-2011 | Отправлено: 20:38 11-05-2011
vegaweb



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ох, чето я ниче не понял...

Цитата:
Адрес, куда пенаправляешь, нужно писать полностью.

и

Цитата:
но учти что во второй части путь указывается без основного хоста

??
можешь пример живого правила показать?

Всего записей: 107 | Зарегистр. 13-03-2009 | Отправлено: 21:28 11-05-2011
Schtopt

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В
RedirectMatch 301 {откуда} {куда} и Redirect 301 {откуда} {куда}
 
в поле {куда} нужно писать адрес вместе с http://{твой_сайт}
 
А в правиле RewriteRule {что} {на что}
 
в поле {на что} страница пишется без http://{твой_сайт}

Всего записей: 8 | Зарегистр. 28-04-2011 | Отправлено: 21:33 11-05-2011
vegaweb



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вобщем, решил проблему чуток через другой орган..
так и не понял твою подсказку Schtopt
спарсил все урлы скриптом, вывел через echo и всунул в htaccess без премудростей

Код:
 
Redirect 301 /page/o_sajte/ http://site.ru/page/o_sajte.html
Redirect 301 /page/privetstvie/ http://site.ru/page/privetstvie.html
Redirect 301 /page/reklama_na_sajte/ http://site.ru/page/reklama_na_sajte.html
 

в любом случае спасибо
ps. в будущем, конечно, все равно прийдется допереть как это делать )

Всего записей: 107 | Зарегистр. 13-03-2009 | Отправлено: 21:45 11-05-2011
dacuan

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

Код:
RewriteRule ^page/([^\]+)/$ page/$1.html  [R=301]  

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 01:58 12-05-2011
Expert LTD



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не знаю как грамотно это называется, но постараюсь объяснить.
 
Имеется сайты www.site1.ru и www.site2.ru.
Необходимо сделать так, что бы пользователь зайдя на сайт www.site1.ru видел содержимое www.site2.ru. Переходя по ссылкам, пользователь должен оставаться на www.site1.ru.
 
Будьте добры, помогите!

Всего записей: 46 | Зарегистр. 20-05-2008 | Отправлено: 19:53 19-05-2011
Cheery



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

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:17 19-05-2011 | Исправлено: Cheery, 20:19 19-05-2011
Expert LTD



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
сервера разные, mod_proxy нет. Выход есть?

Всего записей: 46 | Зарегистр. 20-05-2008 | Отправлено: 20:53 19-05-2011
Cheery



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

Цитата:
Выход есть?

проксирование через скрипт


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:56 19-05-2011
kolkazzz

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Такая проблема,
 
Есть такой файл .htaccess
 
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !parse
RewriteRule . /index.php [L]
</IfModule>
 
есть подкаталог papka
пытаюсь защитить его  
 
AuthName "user"
AuthType Basic
require valid-user
AuthUserFile "/home/user/.htpasswds/passwd"
 
 
как только добавляю пароль на папку, сразу перестают работать лежащие в ней скрипты.
отключаю и  снова все нормально.
те когда врубаю авторизацию мод_реврайт какбы "игнорит"
RewriteCond %{REQUEST_FILENAME} !-d
 и перенаправлят на index.php

Всего записей: 2 | Зарегистр. 10-05-2011 | Отправлено: 04:41 22-05-2011
schastlivja



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!
Прошу прощения если повторяю вопрос уже обсуждаемый ранее.
 
Пытаюсь сделать так, что бы разделы открывались с помощью русских имён.
 
Проблема заключается в работе с разными регистрами:
Если написать
Код:
RewriteRule ^фотки$ photos
, в общем, не так как хотелось бы, но это работает - происходит переход в Upload раздел. Но, вот если написать любую букву в слове фотки заглавной, то переход не происходит. Я понимаю что проблема здесь в том что у букв разный регистр, в результате код символа, и по этому Apache не находит совпадения в списке правил. Любая буква в слове может быть заглавной как и вообще само слово, по этому вариант, написать две строки, с первой заглавной буквой и вариант где первая буква - строчная не приемлем. Читая описание ReWrite, обнаружил, что есть параметр [NC], но он не действует на русский алфавит. Немного поработав с русскими буквами, прочитав в теме о том, что маска [а-я] тоже не действует, приобрёл карманы полные грусти. Также кто-то предлагал вариант с перенаправлением через PHP, но мне этот вариант не походит.
 
Все документы как и сам .htaccess сохранены в UTF-8 без BOM. Сервер - Apache 2.2.17. Обработчик - PHP 5.3.6. Всё это дело работает на базе Windows.
 
Не знаю как это сегодня реализовывается, но раз строчные буквы работают, продаются домены с русскими именами, я очень хотел бы сделать, что бы разделы сайта открывались на будучи написанными на русском. Кажется для этого время пришло.
 
Скажите пожалуйста, как это возможно реализовать? Очень бы хотелось посредством ReRwite.

Всего записей: 97 | Зарегистр. 29-01-2007 | Отправлено: 12:48 25-05-2011 | Исправлено: schastlivja, 15:17 26-05-2011
substrackto

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
schastlivja
попробуйте переписать русские слова с помощью html symbols
легче всего написать слово в адресной строке хрома и посмотреть во что он преобразует

Всего записей: 93 | Зарегистр. 25-10-2007 | Отправлено: 13:16 26-05-2011 | Исправлено: substrackto, 13:28 26-05-2011
Открыть новую тему     Написать ответ в эту тему

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