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

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



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DJ_Scorp
с чего бы?? при чем тут test.php? вы написали

Цитата:
Если он заходит на адрес http://site.ru/prez или http://site.ru/prez/ (то есть без параметров) то соответственно должен попадать на http://site.ru/prez.php  

я вас и спросил - файл, который с расширением .php при этом существует или нет?  
при запросе /t должно запрашивать /t.php - он есть?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:34 24-10-2012 | Исправлено: Cheery, 03:34 24-10-2012
DJ_Scorp



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Говорю ж не существует..
 
То есть так работает если ввести с параметром http://site.ru/t?000 то открывает правильно вот так http://site.ru/test.php?r=000
 
а если без параметров то должно так срабатывать, но не срабатывает  
http://site.ru/t >>> http://site.ru/test.php

Всего записей: 17 | Зарегистр. 06-09-2007 | Отправлено: 03:35 24-10-2012
Cheery



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

Цитата:
а если без параметров то должно так срабатывать, но не срабатывает  

блин.. я процитировал что вы написали, там не было такого.
перебрасывайте ВСЕ на test.php, если нет фактического файла и в нем уже смотрите что и как вам надо
 
 

Код:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /test.php [L]

 
перебросит все запросы на несуществующие папки или файлы на /test.php

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:38 24-10-2012 | Исправлено: Cheery, 03:38 24-10-2012
DJ_Scorp



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
)) я потом уточнял вот что..  

Цитата:
То есть параметр указывающий на страницу и сама страница могут отличаться, то есть якобы в адресе запроса сокращённо, а указывает на полное название страницы...  

 
Как все запросы? а если у меня другая страничка то будет всегда открываться этот test.php
 
Нет, мне ка-то дописать то что уже работает правильно с разными страничками, прсото когда без параметра, то просто перекидывает на чистую страничку, гед уже по умолчанию стоит условие, если нету параметра то ему присваевается заранее указаное значение...
 
короче всё работает по примеру вот этому  
 
RewriteCond %{QUERY_STRING} ^(.+)$
RewriteCond %{QUERY_STRING} !^r=
RewriteRule ^t?$ test.php?r=%1 [L]  
 
нужно просто как-то дописать чтоб если нету параметров, то при заходе по адресу http://site.ru/t открывало страничку http://site.ru/test.php
а если к примеру другая страничка то так
http://site.ru/m открывало страничку http://site.ru/music.php
и тому подобное.

Всего записей: 17 | Зарегистр. 06-09-2007 | Отправлено: 03:49 24-10-2012
Cheery



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

Цитата:
нужно просто как-то дописать чтоб если нету параметров, то при заходе по адресу

и как вы при этом определите, пытаетесь вы открыть что то существующее (картинка, css, js файл) или нет?
вы городите на сайте что то такое, с чем потом сами будете мучаться в случае возникновения проблемы.
самый просто вариант, это проброс всех запросов на несуществующие файлы на один файл, который уже грузит то, что вам нужно, в зависимости от запроса.
так работают все CMS и том подобное.
 
в вашем же варианте нужно жестко прописывать каждый вариант, что жутко неудобно
 
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^t$ test.php
 
и тд и тп

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:55 24-10-2012
DJ_Scorp



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вот, то что и требовалось доказать, теперь работает всё правильно. Спасибо.
 
Дело в том что у меня там до 10 файлов всего планируется, поэтому прописать отдельно для каждого не составит труда. А вот будет другая задача, где много файлов, тогда буду думать в другом направлении, шире так сказать... )))
 
Я как Вы уже догадались любитель изобретать 3-х этажную писанину )))
 
 
Кстати передавать всё в один файл и там разбирать это имеется в виду через preg_match или как? и при этом потом будет перенаправлять на страничку нужную с заменой адресной строки получается или нет? Я вот именно хотел бы избежать подмены, что сейчас и удалось с Вашей помощью.

Всего записей: 17 | Зарегистр. 06-09-2007 | Отправлено: 04:03 24-10-2012
Cheery



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

Цитата:
там разбирать это имеется в виду через preg_match или как?

как удобнее
 

Цитата:
 и при этом потом будет перенаправлять на страничку нужную с заменой адресной строки получается или нет

что мешает сразу сделать include нужного скрипта?


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 04:05 24-10-2012
DJ_Scorp



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Хм... как-то не подумал... то есть саму страничку нужную инклудить?

Всего записей: 17 | Зарегистр. 06-09-2007 | Отправлено: 04:07 24-10-2012
Cheery



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

Цитата:
то есть саму страничку нужную инклудить?

да хотя бы.. либо использовать www.php.net/virtual

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 04:07 24-10-2012 | Исправлено: Cheery, 04:10 24-10-2012
DJ_Scorp



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Не, наверное на данный момент этот ВИРТУАЛ это будет уже слишком мудрённо для меня )))
Пусть пока остаётся как есть, результат нужный есть и пока норма.. До остальных премудростей доберусь со временем.
 
Спасибо Вам огромное за помощь и за терпение!

Всего записей: 17 | Зарегистр. 06-09-2007 | Отправлено: 04:16 24-10-2012
sanb



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
не врублюсь куда копать
стоит wordpress а в подпапке dokuwiki (сайт.ru/wiki/главная)
при включении преобразования урлов в вики стало из онной перекидывать на вордпресс с сообщением что нет такой страницы
какой htaccess надо править и самое главное как?
Сервер: Apache/2.2.22
шаред хостинг
заранее благодарен

Всего записей: 2189 | Зарегистр. 26-07-2006 | Отправлено: 23:11 24-10-2012 | Исправлено: sanb, 23:13 24-10-2012
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sanb
WP перебрасывает на свой файл только если фактического файла или папки не существует.
а преобразование URL работает на той же основе, поэтому либо в правилах для WP нужно сделать исключение, либо в htaccess Wiki указать, что дальнейшую обработку (апач проверяет каждую родительскую папку на наличие .htaccess) проводить не надо
 
исключение простое
RewriteCond %{REQUEST_URI} !dokuwiki

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:14 24-10-2012
sanb



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
премного благодарен
уже разобрался, по этой инструкции сделал https://www.dokuwiki.org/ru:rewrite#apache

Всего записей: 2189 | Зарегистр. 26-07-2006 | Отправлено: 23:28 24-10-2012
DJ_Scorp



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Здравствуйте!
Ещё одна штука что-то не получается...
 
Адрес вида
http://sub.site.ru/znachenie_parametra
должен открывать следующее
http://sub.site.ru/page.php?r=znachenie_parametra
 
Добавлено:
и такой http://sub.site.ru/?znachenie_parametra
тоже должен открывать тоже самое
http://sub.site.ru/page.php?r=znachenie_parametra

Всего записей: 17 | Зарегистр. 06-09-2007 | Отправлено: 22:53 25-10-2012
ra1n



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

Цитата:
ra1n  
Такой редирект настраивается в файле .htaccess  
Вот пример 301 редиректа  
RewriteEngine On  
RewriteBase /  
RewriteRule ^katalog/katalog/razdel1$ razdel1 [R=301,NC,L]  
RewriteRule ^podrazdel3$ razdel3/podrazdel3 [R=301,NC,L]

Вроде всё просто, но не работает.
 
Содержимое .htaccess

Код:
#ErrorDocument 404 /pages.php
 
RewriteEngine On  
RewriteBase /  
RewriteRule ^katalog/katalog/aksessuary$ aksessuary [R=301,NC,L]

 
http://www.victorycar.ru/katalog/katalog/aksessuary - редирект не работает...

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 21:31 28-10-2012
Cheery



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

Цитата:
Адрес вида  
http://sub.site.ru/znachenie_parametra  
должен открывать следующее  
http://sub.site.ru/page.php?r=znachenie_parametra  

для начала вам нужно определить, а является ли это значение какой то страницей или папкой или нет.
если это значение просто одно какое то конкретное, то могли бы из предыдущего и сами написать
RewriteRule /znachenie_parametra$  /page.php?r=znachenie_parametra [L]
если же значение может быть другим - тогда возникают проблемы
 

Цитата:
и такой http://sub.site.ru/?znachenie_parametra  
тоже должен открывать тоже самое  
http://sub.site.ru/page.php?r=znachenie_parametra

опять же, из предыдущего, проверяете в  
RewriteCond %{QUERY_STRING} znachenie_parametra
а можно и в index.php смотреть как параметр получили
 
 
ra1n

Цитата:
редирект не работает..

у вас .htaccess в корне сайта или в какой то папке?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:00 29-10-2012 | Исправлено: Cheery, 00:01 29-10-2012
ra1n



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
В корне. Система - Амиро...

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 19:52 29-10-2012
ra1n



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

Цитата:
у вас .htaccess в корне сайта или в какой то папке?

Оказывается modRewrite отключен в настройках хостинга.

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 18:56 01-11-2012
wilhel2

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет!
 
Прошу помощи.  
 
Есть файл map.txt с содержимым:
catalog/detail.php?ELEMENT_ID=232809    /catalog/detail.php?ELEMENT_ID=234083
catalog/detail.php?SECTION_ID=158&ELEMENT_ID=139799     /catalog/detail.php?ELEMENT_ID=139799
и т.д
 
В настройках вирт.хоста прописал:
RewriteMap automap txt:/.../.../map.txt
 
В .htaccess:
RewriteCond ${automap:$1|NOT_FOUND} !NOT_FOUND
RewriteRule ^(.*)$ ${automap:$1} [R=301,L]
 
Нужно организовать 301 редирект с url1 на url2 (из файла). У меня получается, только если в первом столбце прописать что-то типа about/ и т.д, т.е. если в первом столбце нет параметров.
 
За ранее спасибо.

Всего записей: 1 | Зарегистр. 13-11-2012 | Отправлено: 11:42 13-11-2012
3xclus1v3

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

Всего записей: 8 | Зарегистр. 05-12-2012 | Отправлено: 17:18 15-12-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