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

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

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Autoshkatulka
Что подразумевается под "страницами, с которых идет переадресация"?
Представленный код ничего не переадросовывает. Он просто подставляет вместо расширения shtml расширение php и выполняет скрипт и фактической переадресации с отправкой заголовков браузеру не происходит.

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 15:20 03-12-2007
Autoshkatulka



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dacuan
 
В общем, в итоге мне надо получить следующее:
есть страница в html, например эта - _http://www.autoshkatulka.ru/pddothercountry/index.shtml
это старая страница. В CMS создана идентичная страница - _http://www.autoshkatulka.ru/pddothercountry/index.html .
 
Мне нужно чтобы при переходе по shtml-ссылке из поисковой машины или там где ее опубликовали пользователи попадали на страницу из CMS, при этом робот поисковой машины получал 301 код от shtml-страницы .
 
Надеюсь, понятно пояснила...
 
P.S.: Я в этом совершенно ничего не понимаю, а сделать надо... Потому как кроме меня никто мне этого не сделает.

Всего записей: 14 | Зарегистр. 21-01-2006 | Отправлено: 20:01 03-12-2007
dacuan

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

Код:
 
RewriteRule (.*)\.shtml$   $1.html  [L,R=301]
 

 
Но будет переадресовывать все запросы, в том числе и на несуществующие страницы. Т.е., например, пользователь запрашивает _http://www.autoshkatulka.ru/pddothercountry/bla_bla.shtml его переадресовывает на _http://www.autoshkatulka.ru/pddothercountry/bla_bla.html с кодом 301 и только после этого отдаст 404-ю ошибку.

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 11:18 04-12-2007
Autoshkatulka



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dacuan
 
Сделала, как вы предложили, получила, что при переадресации со страницы _http://www.autoshkatulka.ru/pddothercountry/index.shtml в адресной строке отображается адрес _http://www.autoshkatulka.ru/usr/local/apache/htdocs/pddothercountry/index.html и в связи с этим страница с данными не отображается а отображается 404 ошибка...

Всего записей: 14 | Зарегистр. 21-01-2006 | Отправлено: 12:16 04-12-2007
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Autoshkatulka
 
Файл .htaccess должен содержать следующие строки:
 

Код:
 
RewriteEngine   On
RewriteBase /
 
RewriteRule (.*)\.shtml$   $1.html  [L,R=301]
 

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 12:55 04-12-2007
Autoshkatulka



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dacuan
 
при загрузке .shtml в итоге получаю пустую страницу со строкой по середине "Under construction"

Всего записей: 14 | Зарегистр. 21-01-2006 | Отправлено: 12:49 05-12-2007
dacuan

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

Цитата:
при загрузке .shtml в итоге получаю пустую страницу со строкой по середине "Under construction"

А в логах что по этому поводу говорится?

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 16:56 05-12-2007
Mavrun

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Поможите плиз!

Код:
 
RewriteEngine on
Options +FollowSymlinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+[^/])$ $1/ [QSA]
 
RewriteRule ^about[/](.*).php[/]$ ./index.php?task=about&id=$1 [QSA]
 

 
прописываю это в хтаксесе. на странице меняю урл на http://servername/about/1.php
 
когда загружаю в браузере и прохожу по новоиспечённой сссылке, то всё нормально. Но на той странице куда я попал вместо этой ссылки уже ссылка http://servername/about/about/1.php а если и там по ней счёлкаю, то уже попадаю на страницу http://servername/about/about/about/1.php
 
как с этим бороться?????
 
 
 
 

Код:
RewriteRule ^service[/](.*).php[/]$ ./index.php?task=service&id=$1 [QSA]

и на старнице ссылку переделываю на http://servername/service/1.php , то по ней проходить не получается, ошибка 404=(

Всего записей: 7 | Зарегистр. 06-12-2007 | Отправлено: 16:17 06-12-2007
zeor



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Люди Помогите пожалуйста. Не получается виртуальный поддомен.
 
Имеется ссылки:
 http://servername.ru/city/name1.html?id=param1
 http://servername.ru/city/name2.html?id=param1
 
преобразовать их к виду:
 
 http://name1.servername.ru?id=param1
 http://name2.servername.ru?id=param1
 

Всего записей: 1 | Зарегистр. 22-10-2007 | Отправлено: 10:47 11-12-2007
farik7



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите пожайлуста.
Мне нужно с помощью mod_rewrite сделать следующее:
 
http://www.site.com.ua/ru/
Заменить на
http://www.site.com.ua/?lng.ru
 
и
 
http://www.site.com.ua/ru/index.php?p=news
на  
http://www.site.com.ua/index.php?p=news&lng=ru

Всего записей: 31 | Зарегистр. 05-10-2006 | Отправлено: 13:52 25-12-2007
XM0ZG

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подборка информации, линков и книжек по теме mod_rewrite
 
http://pro-seo.ru/?p=43
 
книжки:
The Definitive Guide to Apache mod_rewrite
Professional Search Engine Optimization with PHP: A Developer’s Guide to SEO

Всего записей: 16 | Зарегистр. 28-01-2005 | Отправлено: 05:16 10-01-2008 | Исправлено: XM0ZG, 05:21 10-01-2008
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Еще раз всем доброе время суток. Подскажите как можно сделать вот такую подмену пользователь заходит на мой сайт company.com а в реале данные идут из example.com. Понятно что все это надо будет делать через .htaccess. Я знаю допустим как можно сменить урл вида /data/picture.jpg на /data/engine.php?file=picuture так что пользователь даже не имеет представления что работает php движок. Но как такое сделать с доменном? Если кто запрашивает company.com/file/test.htm Апач в фоновом режиме должен подкачивать страничку с example.com/file/test.htm
 
п.с. Это нечто подобие форвардинга домена или AKA склейка доменов. Я пытался сделать через httpd.conf добавив в домене переадресацию "ScriptAlias / http://example.com/" а также через "Redirect / http://example.com/". Потом купил даже форвардинг домена у самого домен регистратора но если в первом случае была полная лажа, происходил банальный редирект, что меня вы понимаете не устраивает. А во втором случае хотя в адресной строке и оставался company.com но наводя маус на линки в статус баре виден не company.com/file/test.htm а example.com/file/test.htm

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 14:14 11-01-2008
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Delphi6
Наиболее идейно-верным решением будет назначить example.com алиасом для company.com. Но если это не подходит, то можно попытаться использовать mod_proxy (читать по поводу флага P в правилах mod_rewrite).

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 10:38 14-01-2008
giganet1

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.
Можете подсказать как с помощью реврайта сделать ссылки следующим образом
 
http://site.com/dl/server1/dir1/dir2/dirN/file.ext
 
http://site.com/dl.php?s=server1&path=dir1/dir2/dirN/file.ext

Всего записей: 3 | Зарегистр. 28-09-2007 | Отправлено: 02:42 21-01-2008
arcanum



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

Цитата:
Но на той странице куда я попал вместо этой ссылки уже ссылка http://servername/about/about/1.php а если и там по ней счёлкаю, то уже попадаю на страницу http://servername/about/about/about/1.php  

 
 
ВО! Та же самая проблема. Задача какая... есть ссылки
 
_http://domain/link1.shtml
_http://domain/link2.shtml
_http://domain/link3.shtml
и несколько вот таких
 
_http://domain/sub_folder/link5.shtml
_http://domain/sub_folder/link6.shtml
 
Так вот, если я нажимаю на
_http://domain/sub_folder/link5.shtml  - все честно отрабатывается и страница загружается, НО!! теперь если я подведу мышку на ссылку
_http://domain/link1.shtml - то у меня данный линк превращается вот вот что
_http://domain/sub_folder/link1.shtml
 
Т.е. после перехода по ссылке которая "как-бы" в папке ВСЕ ОСТАЛЬНЫЕ ссылки считают эту папку КОРНЕМ!!! Как решить трабл?
 
 
 

Всего записей: 162 | Зарегистр. 17-03-2006 | Отправлено: 13:06 22-01-2008
Jokerjar79



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

Цитата:
Здравствуйте.  
Можете подсказать как с помощью реврайта сделать ссылки следующим образом  
 
http://site.com/dl/server1/dir1/dir2/dirN/file.ext  
 
http://site.com/dl.php?s=server1&path=dir1/dir2/dirN/file.ext

 
RewriteRule ^dl/([^/.]+)/(.*)(/?)$ dl.php?s=$1&path=$2 [L]
 

Всего записей: 710 | Зарегистр. 08-09-2007 | Отправлено: 13:32 22-01-2008 | Исправлено: Jokerjar79, 13:41 22-01-2008
arcanum



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

Цитата:
Т.е. после перехода по ссылке которая "как-бы" в папке ВСЕ ОСТАЛЬНЫЕ ссылки считают эту папку КОРНЕМ!!! Как решить трабл?  

 
Все, понял в чем проблема. А проблема в том, что ВСЕ ссылки записаны как
 
<a href="link1.shtml">Link1</a>
 
а нужно было писать
 
<a href="/link1.shtml">Link1</a> т.е. нужен был / (слеш)
 
Теперь второй вопрос, как написать реврайт, чтоб он учитывал этот слэш?? Или это нереально и придется все ссылки перебивать?

Всего записей: 162 | Зарегистр. 17-03-2006 | Отправлено: 13:36 22-01-2008
Apart

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как в htaccess приписать автоматическое определеные домена и вывод контента в зависимости от домена. Напр., если взять домены pageru.com.ua pageuk.com.ua pagefr.com.ua, у которых бы контент выдавался в виде pageru.html, pageru2.html, pageuk.html, pageuk2.html, pageuk3.html и пр.  
 
Должно быть, наверное, что-то типа  
 
RewriteCond %{HTTP_HOST} (www\.)?(директива определяющая домен)\.com\.ua [NC]
RewriteRule ^(.*)\.html$ (директива определяющая домен)$1.html [L,QSA]
 

Всего записей: 409 | Зарегистр. 10-05-2005 | Отправлено: 14:06 22-01-2008
Jokerjar79



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Apart, это через виртуальные сервера реализовывается

Всего записей: 710 | Зарегистр. 08-09-2007 | Отправлено: 14:09 22-01-2008
Apart

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А поконкретней?  
 
ps: у меня виртуальный хостинг

Всего записей: 409 | Зарегистр. 10-05-2005 | Отправлено: 15:02 22-01-2008
Открыть новую тему     Написать ответ в эту тему

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