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

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



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, сломал весь мозг. Есть домен site1.by, перенес с него инфу на site2.by/dir
поменял ДНС'ы, теперь site1 и site2 указывают на один хост. Нужно сделать так, чтобы при обращении на site1.by был редирект на site2.by/dir или site1.by/dir
Делал так:

Код:
 
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^site1\.by
RewriteRule ^(.*)$ http://site1.by/dir/$1 [R=permanent,L]
 

Пробовал и другие варианты, ничего не происходит.
 
Вариант по-проще тоже не срабатывает:

Код:
Redirect /site1.by http://site2/dir/index.php

 


----------
А сегодня что для завтра сделал я ?..

Всего записей: 628 | Зарегистр. 27-02-2005 | Отправлено: 23:17 24-09-2011 | Исправлено: winhex, 23:30 24-09-2011
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
winhex
Хорошо бы увидеть логи mod_rewrite. О том, как их получить написано в шапке.

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 13:23 26-09-2011
RizaR

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
Помогите немножко разобраться с регуляркой для htaccess

Цитата:
 
RewriteRule ^([a-zA-Z0-9_\-/]*)/?$                                index.php?page=$1 [NC]
 

Старый вариант. Не работает на apache 1.3
Типа ему регулярное выражение не нравится.

Цитата:
 
 RewriteRule: cannot compile regular expression '^([a-zA-Z0-9_\\-/]*)/?$'\n
 

Сейчас, чтобы я не экранировал, все равно не работает так как надо. Что не так?
 
Добавлено:
При:  

Цитата:
RewriteRule ^([a-zA-Z0-9_\-\/]*)\/?$                                index.php?page=$1 [NC]
 
 
Не находит страницу вообще

Всего записей: 81 | Зарегистр. 23-09-2005 | Отправлено: 10:49 09-10-2011
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RizaR
Стандартный первый совет:
Цитата:
Хорошо бы увидеть логи mod_rewrite. О том, как их получить написано в шапке.

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 14:34 10-10-2011
Karpenkos

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

Код:
http://site/view.php?id=2

 
в
 

Код:
http://site/view/id=2

Всего записей: 142 | Зарегистр. 08-10-2011 | Отправлено: 22:00 22-10-2011
MyGoogle

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет.
 
Возможно ли переделать
Код:
 
 
Код:
 

Код:
 
www.site.com/index.php?view=ad&search=keywordhere
 

 
 
 
в что то типа
Код:
 
 
Код:

Код:
 
www.site.com/keywordhere.html
 

 
 
 
 
Можно ли так преобразовать урл ?
 
Спасибо за помощь

Всего записей: 219 | Зарегистр. 06-12-2008 | Отправлено: 15:56 23-10-2011
Redduck9

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сделал такое правило
 
RewriteCond %{REQUEST_URI} articles/
RewriteRule ^articles/1/150(/*)$ articles/news/kasko-online/ [R=301,L]
 
То есть я хочу что бы со страниц articles/1/150 со слешом на конце или без, шел редирект на  articles/news/kasko-online/ (Слеш на конце обязателен)
А идет редирект на  articles/news/kasko-online (без слеша)???


----------
Учусь потихоньку, а надо бы побыстрей!
Redduck&FreeBSD

Всего записей: 211 | Зарегистр. 16-08-2011 | Отправлено: 13:58 15-11-2011 | Исправлено: Redduck9, 13:59 15-11-2011
pe4nuke



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Скажите, как сделать реврайт
 /?q=Doctor%20House
на  /?q=Doctor-House

Всего записей: 1 | Зарегистр. 14-05-2006 | Отправлено: 15:47 06-01-2012
Cheery



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


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:14 06-01-2012
Redduck9

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pe4nuke
 
RewriteCond %{QUERY_STRING} ?q=Doctor%20House
RewriteRule (.*) ?q=Doctor-House [L,QSA]
 
Возможно вот так сработает правило, попробуйте.

Всего записей: 211 | Зарегистр. 16-08-2011 | Отправлено: 13:35 07-01-2012 | Исправлено: Redduck9, 13:36 07-01-2012
Nagolder

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

Цитата:
Возможно вот так сработает правило, попробуйте.

Да так-то сработает однозначно Но если вместо House будет Ajbolit, надо писать еще одну регулярку, потом еще одну и т.д., пока .htaccess не лопнет...
Насколько я понимаю, вопрос был в общем, о замене пробела %20 на тире. Если так, то здесь лучше послушать Cheery, скриптом сделать намного проще.
 
А вот если на самом деле всего один вариант, жестко прописанный с Doctor%20House - ну тогда можно и в .htaccess прописать однозначно.

Всего записей: 120 | Зарегистр. 24-09-2006 | Отправлено: 13:43 07-01-2012
Redduck9

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Nagolder
Я думал про конкретную строку, одну. Но можно поколдовать. Просто надо знать какие варианты могут встретиться. Но в конечном итоге, времени может уйти больше чем сделать с помощью скрипта, а у некоторых может и наоборот. Вообщем кто каким инструментом владеет лучше
Всех с НОВЫМ ГОДОМ!

Всего записей: 211 | Зарегистр. 16-08-2011 | Отправлено: 13:50 07-01-2012 | Исправлено: Redduck9, 13:53 07-01-2012
nickjust



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
привет всем!
Тут проблемка нарисовалась  ..
 
Супортер вырубил все настройки апача и пшп..
И теперь не работает редирект на субдомены!
 
Во вложение httpd.conf и htaccess.txt
http://zalil.ru/32483358
В корне папка subdomains и там папки субдоменов!
Все идеально работало!
Хостер говорит включите что вам надо!
Что включить чтобы работало ?
 
 
CGI     Off-On
Options +ExecCGI     Off-On
Options +Indexes     Off-On
Options +Includes     Off-On
Options +FollowSymLinks     Off-On
Options +Multiviews     Off-On
 
AddDefaultCharset     OFF
Оптимизированый алгоритм отдачи статического контента
Данный параметр позволяет обрабатывать скрипты сайта и статические данные разными http серверами. Это значительно увеличивает скорость работы сайта и понижает его нагрузку на сервер. Данную опцию нужно отключать только в случае если на сайте используется mod_rewrite и динамические страницы преобразовываются в форматы jpg, jpeg, gif, png, ico, css, bmp, js, swf, avi, mp3, flv, mpeg.                             
 
 

Всего записей: 100 | Зарегистр. 17-04-2003 | Отправлено: 21:56 12-01-2012
billybons2006



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, пожалуйста, есть два домена: domain.com и domain.ru.
Никак не могу придумать, как сделать так, что бы обращении к домену domain.com к строке параметров добавлялся бы параметр lang=eng, а при обращении к domain.ru - параметр lang=ru
 
Пример:
http://domain.ru/index.php?p=30
превращался бы в  
http://domain.ru/index.php?p=30&lang=ru
 
а
 
http://domain.com/index.php?p=30
превращался бы в  
http://domain.com/index.php?p=30&lang=eng
 
Проблема в том, что оба домена (ru и com) ведут на одну папку на одном хостинге. Изменить это никак нельзя Надо основываясь на введенном имени домена добавить к остальной части параметров lang (чтобы внутри скрипта index.php на основании $_GET[lang] можно было делать запросы либо к английской БД, либо к русской.
 
ЧПУ я дальше доделаю сам. Помогите, пожалуйста! Сейчас пришлось сделать временную заглушку:
RewriteCond %{HTTP_HOST} domain.com
RewriteRule (.*) http://domain.ru/$1 [R=301,L]
 
Но это только временно...
 
Добавлено:
Нечто вроде:
 
RewriteRule ^soft([0-9]+).html$ /index.php?p=$1 [L]
 
только с обработкой имени домена (пример ниже не работает, а хостинг уже включен, мне нельзя особо экспериментировать!):
 
RewriteRule ^domain.([a-z](2,3))/soft([0-9]+).html$ /index.php?lang=$1&p=$2 [L]
 
Вот примерно такая мысль...

----------
0x5f375a86

Всего записей: 227 | Зарегистр. 24-01-2006 | Отправлено: 15:55 19-01-2012
dacuan

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

Цитата:
Проблема в том, что оба домена (ru и com) ведут на одну папку на одном хостинге. Изменить это никак нельзя  Надо основываясь на введенном имени домена добавить к остальной части параметров lang (чтобы внутри скрипта index.php на основании $_GET[lang] можно было делать запросы либо к английской БД, либо к русской.

 
А что мешает в скриптах выбирать какую базу подключать основываясь не на $_GET["lang"], а на $_SERVER["HTTP_HOST"]?
 
Но если очень нужен lang, то можно попробовать так:

Код:
RewriteCond %{HTTP_HOST} domain.com
RewriteCond %{QUERY_STRING} !lang
RewriteRule ^(.*)$ $1?lang=eng [QSA,L,NS]
 
RewriteCond %{HTTP_HOST} domain.ru
RewriteCond %{QUERY_STRING} !lang
RewriteRule ^(.*)$ $1?lang=rus [QSA,L,NS]

 
 

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 18:35 19-01-2012
billybons2006



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dacuan, вы просто супер!

Цитата:
основываясь не на $_GET["lang"], а на $_SERVER["HTTP_HOST"]?  

Это как раз то самое, что мне и надо было! Намного проще и без мытарств с htaccess! Большое спасибо!
 
Но и за код для htaccess спасибо также!

----------
0x5f375a86

Всего записей: 227 | Зарегистр. 24-01-2006 | Отправлено: 11:02 20-01-2012
falcon92

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Салют всем.
 
Срочно нужен хелп.
Нужно статические элементы получать не из site.ru:80, а из site.ru:8081. Затрахался с мод реврайтом.
 

Цитата:
 
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^.* - [F]
RewriteRule ^(.*)$ http://site.ru:8081/images/$1 [R,L]
 

 
Так получаем бесконечный Loop загрузки картинки по нужному адресу. Оооочень срочно надо.
Хотя бы один пример с jpg. С остальными сам разберусь.

Всего записей: 57 | Зарегистр. 30-10-2011 | Отправлено: 22:22 24-01-2012
Laterport



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Знатоки, подскажите пожалуйста.
 

Код:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) $1.php
 
ErrorDocument 500 http://site.ru/error500
RewriteRule ^(error500.*) error500.html

 
 
Имея такой код, указывать полную ссылку на файл с расширением .php не нужно. Если я знаю например что есть info.php, указываю http://site.ru/info и rewrite отрабатывает на отлично. В случае если указывается несуществующая ссылка, выводится указанная мной страница " http://site.ru/error500". ВОПРОС! Как сделать так, чтобы данные со страницы "error500" отображались, а в адресной строке  было просто "http://site.ru/. Заблаговременно большое спасибо.
 

Всего записей: 171 | Зарегистр. 09-02-2012 | Отправлено: 12:26 09-02-2012 | Исправлено: Laterport, 12:58 09-02-2012
Redduck9

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Laterport
Я не знаток, но мне кажется то что Вы предлагаете не верное решение! А что если поисковик пойдет по  странице а сервер по каким либо причинам выдаст "error500", то ему отобразится данные "error500" с адресам главной странице, что поисковик должен думать?
Но я не большой знаток, возможно ошибаюсь!

----------
Учусь потихоньку, а надо бы побыстрей!
Redduck&FreeBSD

Всего записей: 211 | Зарегистр. 16-08-2011 | Отправлено: 15:09 09-02-2012 | Исправлено: Redduck9, 15:11 09-02-2012
Laterport



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Redduck9
В данном случае меня не интересует куда пойдёт поисковик.

Всего записей: 171 | Зарегистр. 09-02-2012 | Отправлено: 15:23 09-02-2012
Открыть новую тему     Написать ответ в эту тему

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