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

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



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ребята, извините, за ламерский вопрос. Но не как сам справится не могу.
есть файлы index.php, feedback.php, law.php. Если лазить по этим страничкам, то ссылки принемают значение law.php?id=2 к примеру. Вот не как не могу понять сути как это сделать.. читал статьи которые в шапки уже по два раза,. Я так понимаю что регулярное выражение надо, но что то не получается у меня.  
Может кто разжует мне?
А хочу  чтобы был вид law.php/2.html

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 12:51 03-05-2009 | Исправлено: DarkSmoke, 12:52 03-05-2009
Cheery



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

Цитата:
Может кто разжует мне?

разжеванная кашица была уже не раз в этой теме - просмотрите ее

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

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

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

Цитата:
Полная документация, но мне показалась сухой, мало полезных и главное наглядных примеров
Потому что ссылку надо давать правильную
http://www.egoroff.spb.ru/portfolio/apache/

Цитата:
плагин к IE для просмотра DjVu-файлов
Смотреть DjVu плагином от IE - мазохизм
WinDjView

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 15:25 05-05-2009
alex_zin



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Отличные статьи, чтобы начать разбираться в теме:
 
_http://www.addedbytes.com/apache/url-rewriting-for-beginners/
_http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/

Всего записей: 440 | Зарегистр. 19-02-2005 | Отправлено: 13:46 06-05-2009
dikeyfd



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что-то никак не соображу...
 
Есть хостинг megahoster.msk.ru
 
на него есть куча алиасов:
vasia.msk.ru/
masha.msk.ru/
glasha.msk.ru/
 
как в .htaccess прописать ссыли на соотв. каталоги
 
/vasia/
/masha/
/glasha/
/megahoster/
 
при этом не подменяя строку в браузере

Всего записей: 26 | Зарегистр. 08-02-2006 | Отправлено: 14:33 06-05-2009
alex_zin



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
никак не могу понять можно ли это сделать проще:
 
есть www.host.com/index.php?param1=value1&param2=value2...
хочу www.host.com/categories/index_param1_value1_param2_value2....html
всего максимальное значение параметров - 6.
 
Решил пока отдельным RewriteRule для каждого набора (1,2,3,4,5,6) параметров вот так:

Код:
 
RewriteRule ^categories/index_([a-zA-Z]+)_([0-9]+)\.html$ index.php?$1=$2 [L]  
RewriteRule ^categories/index_([a-zA-Z]+)_([0-9]+)_([a-zA-Z]+)_([0-9]+)\.html$ index.php?$1=$2&$3=$4 [L]
RewriteRule ^categories/index_([a-zA-Z]+)_([0-9]+)_([a-zA-Z]+)_([0-9]+)_([a-zA-Z]+)_([0-9]+)\.html$ index.php?$1=$2&$3=$4&$5=$6 [L]
#и так далее для 6 параметров..
 

 
Неужели нельзя?

Всего записей: 440 | Зарегистр. 19-02-2005 | Отправлено: 17:40 06-05-2009 | Исправлено: alex_zin, 18:23 06-05-2009
dacuan

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

Код:
RewriteRule ^categories/index_(([a-zA-Z]+)_([0-9]+))+\.html$ index.php?opts=$1 \[L\]  

А уже в скрипте разбирал значение opts

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



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

Код:
 
RewriteRule (.*)_([a-zA-Z]+)_([0-9\-]+)([a-zA-Z0-9=\-&]*)\.html$ $1&$2=$3$4.\html [N]
RewriteRule ^([a-zA-Z]+)&(.*)\.html $1.php?$2
 

Всего записей: 440 | Зарегистр. 19-02-2005 | Отправлено: 20:05 08-05-2009
ra1n



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

Код:
http://www.site.ru/index.php?page=23&langid=0
должен происходить редирект на  

Код:
http://www.site.ru/some_page

 
Есть флешка от старого сайта, где жестко прописаны ссылки, а на новом сайте разделы имеют совсем другой адрес. Хочу таким образом избежать переделок флешки.

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 22:58 14-05-2009 | Исправлено: ra1n, 23:02 14-05-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ra1n
www.php.net/header  
вот и добавляете в самом index.php, к примеру

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:00 14-05-2009
ra1n



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
а используя .htaccess нельзя?

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 23:04 14-05-2009
Cheery



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

Цитата:
а используя .htaccess нельзя?

можно, но вы не показали специфики
проброс именно с такими параметрами? или что?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:13 14-05-2009
ra1n



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да по сути всё просто.
Параметры не надо передавать.  
Отличие идет по "?page=**"
Если page=1, кидаем на pageA
если page=11, кидаем на pageB
 
Несколько жестких правил...

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 23:16 14-05-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ra1n
RewriteCond %{QUERY_STRING}  page=1$
RewriteRule .*$ /pageA [L]
RewriteCond %{QUERY_STRING}  page=11$
RewriteRule .*$ /pageB [L]
 
но есть свои неудобства.. в частности при такой записи - там больше ничего не должно быть.
но если убрать $, то 1 и 11 - одно и то же..
в смысле что при 11 - 1 сработает раньше
 
можно попробовать так
RewriteCond %{QUERY_STRING}  page=1[^0-9]?
RewriteRule .*$ /pageA [L]
RewriteCond %{QUERY_STRING}  page=11[^0-9]?
RewriteRule .*$ /pageB [L]

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:31 14-05-2009 | Исправлено: Cheery, 23:35 14-05-2009
ra1n



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не работает что то...
 
Вот как целиком файл выглядит

Код:
RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html
php_value error_reporting 7
ErrorDocument 404 /pages.php
 
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING}  page=23$
RewriteRule .*$ /pageA [L]

 
Options +FollowSymLinks
RewriteEngine On
видел в одном примере, попробовал добавить
всё равно не работает... и с этими строчками и без них

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 23:35 14-05-2009
Cheery



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

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:36 14-05-2009
ra1n



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ой, сразу изменений не заметил
 
Добавлено:
не пойму, как
Цитата:
page=1[^0-9]?
может указать на
Цитата:
/index.php?page=1&langid=0  


Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 23:40 14-05-2009
Cheery



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

Цитата:
может указать на  

почитайте, что такое QUERY_STRING и про регулярные выражения

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:45 14-05-2009
wyxa



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Настроил mod_rewrite, теперь ссылки на сайт сделаны в виде:
httр://домен/папка1/папка2/.../папкаN/файл
(без расширения, и без / на конце).
также может быть так: httр://домен/папка1/папка2/.../папкаN/
 
Но некоторые браузеры (среди них IE 6) запоминают ссылку
httр://домен/папка1/папка2/
в виде
httр://домен/папка1/папка2
(без / на конце)
 
Тогда «папка2» интерпретируется как файл, и выскакивает ошибка 404.
 
Вопрос: Можно ли как-то настроить .htaccess так, чтобы он проверял существует ли адрес
httр://домен/папка1/папка2
и если такого нет, попробовал
httр://домен/папка1/папка2/
 
Вот что у меня в .htaccess

Всего записей: 614 | Зарегистр. 16-10-2007 | Отправлено: 02:21 05-06-2009 | Исправлено: wyxa, 02:26 05-06-2009
Cheery



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

Цитата:
Вопрос: Можно ли как-то настроить .htaccess так, чтобы он проверял существует ли адрес  

включите в конфиге апача mod_dir
http://httpd.apache.org/docs/2.0/mod/mod_dir.html

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:24 05-06-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