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

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



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

[R=301]
Цитата:
http://мой_сайт/articles.php  редиректилась на http://мой_сайт/articles/  

RewriteRule articles.php   http://мой_сайт/articles/ [R=301]
 
по аналогии.
 
 
Добавлено:

Цитата:
RewriteRule ^.*articles/([0-9]*)/([0-9]*)\.htm articles.php?s=$2&r=$1  

 
не знаю работает ли у вас этот код, но правильней так
 
RewriteRule ^articles/([0-9]*)/([0-9]*)\.htm$ /articles.php?s=$2&r=$1

Всего записей: 1627 | Зарегистр. 25-11-2003 | Отправлено: 13:36 14-04-2007
Sozon

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mira, спасибо.
 
У меня еще одна проблема: вопросительный знак в URL
 
RedirectMatch permanent ^articles\.php?r=([0-9]*)$ http://мой_сайт/$1
 
 
Т.е. например правило  
RedirectMatch permanent ^articles\.php&r=([0-9]*)$ http://мой_сайт/$1
работает без роблем, а как только в URL встречается "?", то начинаются проблемы.
Экранирование вопроса не помогает, т.е.  
RedirectMatch permanent ^articles\.php\?r=([0-9]*)$ http://мой_сайт/$1
тоже не работает
 
 
====================================
У кого нибудь получалось работать с вопросительным знаком в URL?

Всего записей: 7 | Зарегистр. 05-03-2006 | Отправлено: 15:00 14-04-2007 | Исправлено: Sozon, 16:07 14-04-2007
aL_MIR



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Всем доброго времени суток!  
Был движок с кучой шаблонов картинок и тд (находящиеся в соответсвующих подкаталогах) теперь этот движок пришлось перенести в отдельный каталог, проблема в том что к ресурсам движок обращался с корня, поэтому теперь он не видит свои стили картинки и шаблоны... дайте пример htaccess чтоб исправить ситуацию  
 
Поясняю на примере  
 
было  
/css/defaut.css  
/img/index.gif  
/index.php в нем прописано src="/img/h_1.jpg"  
 
стало  
/service/css/defaut.css  
/service/img/index.gif  
/service/index.php  
 
заранее спасибо

Всего записей: 99 | Зарегистр. 10-10-2006 | Отправлено: 00:36 21-04-2007
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
aL_MIR
RewriteCond %{REQUEST_URI}  !^/service/
RewriteRule /(.*)$   /service/$1
 
что такое.. не проверял
 

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:40 21-04-2007
aL_MIR



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
не работает, в логах пусто почемуто
Как нибудь влияет это  
 
RewriteEngine on
RewriteBase /
RewriteRule !(^(_|index.php|admintools|robots.txt|services)) /index.php
 
которое прописано в корне? указанный вами htaccess помещал в подкаталог services

Всего записей: 99 | Зарегистр. 10-10-2006 | Отправлено: 00:47 21-04-2007 | Исправлено: aL_MIR, 00:48 21-04-2007
Cheery



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

Цитата:
указанный вами htaccess помещал в подкаталог services

ну, и когда тогда он должен выполняться??  
htaccess обрабатывается при заходе в директорию с ним.
 

Цитата:
которое прописано в корне?

ну так решить надо, чего хочется.. это перекидывает все, что не относится к тому, что в скобках, на index.php

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:50 21-04-2007
aL_MIR



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
смысл в том что теперь у меня на сайте 2 движка
в корне такой htaccess
 
php_value error_reporting 7
RewriteEngine on
RewriteBase /
RewriteRule !(^(_|index.php|admintools|robots.txt|services)) /index.php  
 
это чтоб работал правильно первый движок те не обрабатывал то что в указанных папках.  
второй движок в папке service но там как я уже говорил все пути прописаны от корня  
проще будет второй движок исправить?

Всего записей: 99 | Зарегистр. 10-10-2006 | Отправлено: 00:59 21-04-2007 | Исправлено: aL_MIR, 01:00 21-04-2007
Cheery



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

Цитата:
смысл в том что теперь у меня на сайте 2 движка  

ну и что?
поясняю..

Цитата:
RewriteRule !(^(_|index.php|admintools|robots.txt|services)) /index.php  

не будет работать с
Цитата:
/css/defaut.css  
/img/index.gif  

так как будет перекидывать на index.php
если, конечно, папки img и css не являются алиасами.. (не помню, как тогда сработает htaccess в отношении их)
определись что и куда должно переправляться


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:05 21-04-2007
aL_MIR



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
сейчас все пути к картинкам в сгенерированной странице выглядят так _http://site/img/h_1.jpg (фоновая картика шапки сайта) их соответсвенно там нет, надо чтоб при обращении скрипта он свои файлы искал уже по пути _http://site/services/img/h_1.jpg
 
если с текущим htaccess я наберу _http://site/services/img/h_1.jpg то картинка появится

Всего записей: 99 | Зарегистр. 10-10-2006 | Отправлено: 01:12 21-04-2007 | Исправлено: aL_MIR, 01:19 21-04-2007
ROMAHi4

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, пожалуйста, как организована структура в этом случае
 
написал вот так в .htaccess
RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z]+)/([A-Za-z]+)$ index.php?act=$1&lang=$2
 
жду результата замены index.php?act=news&lang=ru  на /news/ru
Возникает проблема - картинки и всё остальное грузятся как
http://myweb.ru/news/images/ru/button_proj.jpg
при вводе ссылки  http://myweb.ru/news/ru,
а должен  
http://myweb.ru/images/ru/button_proj.jpg
images/ папка, а /ru/ GET параметр
Помогает, только задача абсолюного пути к файлу....
 
Делал ещё так
 
RewriteCond %{REQUEST_URI} ^/([a-z]{1,10})/
RewriteRule ^([a-z]{1,10})/(.*)     /$2?act=$1 [PT,QSA]
 
RewriteCond %{REQUEST_URI} ^/([a-z]{2})/
RewriteRule ^([a-z]{2})/(.*)     /$2?lang=$1 [PT,QSA]
 
 if (isset($_GET['lang']) && ($_GET['lang']!='') ) )
        $lang = $_GET['lang'];
 else $lang="ru";
 
<img border=0 src="images/<?=($lang!="" ? $lang : "ru")?>/button_news.jpg">

Всего записей: 35 | Зарегистр. 16-02-2007 | Отправлено: 21:36 21-04-2007 | Исправлено: ROMAHi4, 21:40 21-04-2007
andead



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

Цитата:
Возникает проблема - картинки и всё остальное грузятся как  
http://myweb.ru/news/images/ru/button_proj.jpg  
при вводе ссылки  http://myweb.ru/news/ru,  
а должен  
http://myweb.ru/images/ru/button_proj.jpg  
images/ папка, а /ru/ GET параметр  
Помогает, только задача абсолюного пути к файлу....

используй тег BASE в html документе

Цитата:
Тег BASE позволяет авторам явно указать базовый URL документа. Если BASE указан, он должен присутствовать в разделе HEAD документа HTML, до элементов, ссылающихся на внешние ресурсы. Информация о пути, указанная в элементе BASE, влияет только на URL в документе, в котором присутствует этот элемент. Начальный тег обязателен, конечный тег запрещен  


----------
мой блог

Всего записей: 1821 | Зарегистр. 22-09-2005 | Отправлено: 22:02 21-04-2007 | Исправлено: andead, 22:03 21-04-2007
ROMAHi4

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Используя такую конструкцию,  
 RewriteRule ^([A-Za-z]+)/([A-Za-z]+)$ index.php?act=$1&lang=$2  
не всегда работают ссылки,
например если поменять местами /news/ru/, страница 404

Всего записей: 35 | Зарегистр. 16-02-2007 | Отправлено: 22:47 21-04-2007 | Исправлено: ROMAHi4, 22:48 21-04-2007
xqyxqy

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хелп нужен
 
вот ссылка  
 
news.php?year=2007&month=05&day=02&ang_zagolovok=Sait_otkrit
 
 
вот в .htaccess
 
пишу  
 
php_value error_reporting 7  
RewriteEngine on  
RewriteBase /
RewriteRule ^news/([0-9]+)/([0-9]+)/([0-9]+)/([a-z]+).html /news.php?year=$1&month=$2&day=$3&ang_zagolovok=$4
 
нифига не получается.. в чем касяк?

Всего записей: 2 | Зарегистр. 03-05-2007 | Отправлено: 23:40 03-05-2007
Cheery



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

Цитата:
вот ссылка  
 
news.php?year=2007&month=05&day=02&ang_zagolovok=Sait_otkrit  

этого мало.. из чего и во что хочется преобразовать?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:54 03-05-2007
xqyxqy

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
news.php?year=2007&month=05&day=02&ang_zagolovok=Sait_otkrit  
 
вот эту строку хочу преобразовать в
 
news/2007/05/02/Sait_otkrit.html

Всего записей: 2 | Зарегистр. 03-05-2007 | Отправлено: 09:17 04-05-2007 | Исправлено: xqyxqy, 09:44 04-05-2007
Mira



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
столкнулся с такой пролемой при переезде хостера в новый датацентр
 
вот есть правилa, они работают

Код:
 
RewriteRule ^filename/?$ /filename3.php?c=2 [L,QSA]
RewriteRule ^filename/a([0-9]{5})\.html$ /filename3.php?c=2&aid=$1 [L,QSA]
RewriteRule ^filename/a([0-9]{5})-([0-9]*)\.html$ /filename3.php?c=2&aid=$1&page=$2 [L,QSA]
 

 
 
а вот эти же правила, в том же .htaccess не работают.

Код:
 
RewriteRule ^filename2/w([0-9a-z-]{1,2})-([0-9]+)\.html$ /filename2.php?w=$1&page=$2 [L]
RewriteRule ^filename2/w([0-9a-z-]{1,2})\.html$ /filename2.php?w=$1 [L]
RewriteRule ^filename2/?$ /filename2.php [L]
 

 
те в первом случае я получаю данные в переменную _GET
во втором она пуста.
 
как это понимать?!
 
спасибо
 
Добавлено:
ни на локалхосте, ни на других серверах проблем небыло.

Всего записей: 1627 | Зарегистр. 25-11-2003 | Отправлено: 11:33 04-05-2007 | Исправлено: Mira, 08:34 05-05-2007
Cheery



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

Цитата:
вот эту строку хочу преобразовать в
 
news/2007/05/02/Sait_otkrit.html

ну так догадайся

Цитата:
([a-z]+)

ни S ни _ в набор символов выше не входят

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 18:05 04-05-2007
Mira



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

Цитата:
news.php?year=2007&month=05&day=02&ang_zagolovok=Sait_otkrit    

^news/([0-9]{4})/([0-9]{2})/([0-9]{2})/([_a-zA-Z0-9]+)\.html$ /news.php?year=$1& ...$2... $3... $4

Всего записей: 1627 | Зарегистр. 25-11-2003 | Отправлено: 19:04 04-05-2007 | Исправлено: Mira, 19:05 04-05-2007
Mira



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

Цитата:
столкнулся с такой пролемой при переезде хостера в новый датацентр  
 
вот есть правилa, они работают  
 
Код:  
RewriteRule ^filename/?$ /filename3.php?c=2 [L,QSA]  
RewriteRule ^filename/a([0-9]{5})\.html$ /filename3.php?c=2&aid=$1 [L,QSA]  
RewriteRule ^filename/a([0-9]{5})-([0-9]*)\.html$ /filename3.php?c=2&aid=$1&page=$2 [L,QSA]  
 
 
 
 
а вот эти же правила, в том же .htaccess не работают.  
 
Код:  
RewriteRule ^filename2/w([0-9a-z-]{1,2})-([0-9]+)\.html$ /filename2.php?w=$1&page=$2 [L]  
RewriteRule ^filename2/w([0-9a-z-]{1,2})\.html$ /filename2.php?w=$1 [L]  
RewriteRule ^filename2/?$ /filename2.php [L]  
 
 
 
те в первом случае я получаю данные в переменную _GET  
во втором она пуста.  
 
как это понимать?!  
 
спасибо  

 
 
кажись я разобрался со своей проблемой!!!
а проблема (хорошо у меня в голове проскочила мысль о модуле, названия которого не помню, который сам, вроде, подставляет урлы , те каким то там поиском, ну не помню) в одинаковом названии файла и первого куска правила, первой переменной.
 
Так вот можно ли как то отключить этот модуть.
Спасибо.

Всего записей: 1627 | Зарегистр. 25-11-2003 | Отправлено: 08:35 05-05-2007
driverok



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Есть файл hттp://domen/index.php
в нем есть ссылка на другой файл hттp://domen/index_temp.php?var=qwe
 
Вопрос - если я переделаю в файле index.php ссылку на файл index_temp.php в следующую -  
 
hттp://domen/pars/qwe
 
что нужно прописать в .htaccess чтобы во второй файл пришла нужная переменная?
 
т.е я, нажимая на ссылку hттp://domen/pars/qwe должен пойти на hттp://domen/index_temp.php?var=qwe

Всего записей: 91 | Зарегистр. 02-08-2004 | Отправлено: 16:03 05-05-2007 | Исправлено: driverok, 17:01 05-05-2007
Открыть новую тему     Написать ответ в эту тему

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