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

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



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

Всего записей: 471 | Зарегистр. 01-07-2008 | Отправлено: 23:02 29-01-2010
2andr



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Помогите понять
есть урлы
mysite.ru/index.php?do=company
mysite.ru/index.php?do=service
mysite.ru/index.php?do=service&action=parts
mysite.ru/index.php?do=service&action=to
mysite.ru/index.php?do=service&action=price
...
 
хочется получить урлы
mysite.ru/company   в то числе  mysite.ru/company/
mysite.ru/service  в том числе  mysite.ru/service/
mysite.ru/service/parts  ......
mysite.ru/service/to  ......
mysite.ru/service/price  .....
...
 
возможно ли такое с mod_rewrite

Всего записей: 318 | Зарегистр. 30-11-2004 | Отправлено: 16:04 30-01-2010
mv4u

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
помогите реализовать следующую вещь
 
http://forum.ru-board.com/topic.cgi?forum=8&topic=36180
 

Всего записей: 457 | Зарегистр. 03-10-2003 | Отправлено: 01:46 09-02-2010
Cheery



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

Цитата:
возможно ли такое с mod_rewrite  

возможно.. тему пробовали просмотреть - куча примеров?
 
mv4u
дописываете RewriteCond для %{REMOTE_ADDR}
 
RewriteCond %{REMOTE_ADDR} ^12\.34\.56\.78$ [OR]
RewriteCond %{REMOTE_ADDR} ^87\.65\.43\.21$  
и так далее..

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:19 09-02-2010
bazzjr

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Всем привет.
 
У меня следующий вопрос:
 
Есть сайт, на сайте стоит .htaccess, на сайте работают ссылки вида /product/1/2 а также работают ссылки вида /product.php?id=1&cat=2.
 
Как сделать так, чтобы на сайте работали только ссылки вида /product/1/2 а все остальные ссылки с (*.php) не работали(ну например ссылались на 404) ???
 
Вообще это общий вопрос, касающийся логики работы mod_rewrite...

Всего записей: 7 | Зарегистр. 09-02-2010 | Отправлено: 08:09 09-02-2010
Cheery



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

Цитата:
а все остальные ссылки с (*.php) не работали(ну например ссылались на 404) ???

проверяйте в скрипте $_SERVER['REQUEST_URI'] или аналогичное.  
к mod_rewrite не имеет никакого отношения

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:12 10-02-2010
elka82

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть такой модуль переадресации для internet explorer. Лежит в этой папке (qqq), но вот почему-то переадресация не срабатывает.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT}  IE
RewriteCond %{REQUEST_FILENAME} /http://192.168.1.129/mon/qqq/$
RewriteRule ^(.*) http://do.pguas.local/mon/qqq/index_ie.html?% {QUERY_STRING} [L]
</IfModule>
 
 
Сделала еще вот такой вариант:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase http://192.168.1.129/mon/qqq
RewriteCond %{HTTP_USER_AGENT}  Microsoft Internet Explorer|MSIE|IE [NC]
RewriteRule ^index.html$ index_ie.html  [R]
</IfModule>
 
Остается все по-прежнему. Что делать?

Всего записей: 9 | Зарегистр. 01-02-2010 | Отправлено: 12:44 10-02-2010
bazzjr

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

Цитата:
проверяйте в скрипте $_SERVER['REQUEST_URI'] или аналогичное.  

 
А как же проверка в правилах ".php" на содержание в адресной строке?
 
И непонятно как использовать $_SERVER['REQUEST_URI'], где и когда?

Всего записей: 7 | Зарегистр. 09-02-2010 | Отправлено: 14:02 10-02-2010 | Исправлено: bazzjr, 14:20 10-02-2010
Cheery



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

Цитата:
И непонятно как использовать $_SERVER['REQUEST_URI'], где и когда?

в самом php скрипте.  

Цитата:
А как же проверка в правилах ".php" на содержание в адресной строке?  

смысл?
 
Добавлено:
elka82

Цитата:
Остается все по-прежнему. Что делать?  

включить логирование для mod_rewrite и посмотреть обработку.
а еще проще - посмотреть в логах доступа какой же User-Agent получается ваш сервер и попадает ли он под правило

Цитата:
RewriteCond %{HTTP_USER_AGENT}  Microsoft Internet Explorer|MSIE|IE [NC]  



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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:50 10-02-2010
usertum



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RewriteRule ^none/index.php Как вот сюда автоматически подставлять SERVER_NAME? /index.php [L]

Всего записей: 471 | Зарегистр. 01-07-2008 | Отправлено: 23:50 11-02-2010
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
usertum
куда подставлять?? вам он также доступен как и выше через
%{SERVER_NAME}

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:15 12-02-2010
Only4You



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

Код:
 
RewriteEngine On
RewriteBase /
**********
RewriteRule ^(product_info|index|shop_content).php(.*)$ red.php [L]
RewriteRule ^.*\.gif|\.jpg|\.png|\.css|\.js$ - [L]
RewriteRule ^(.*).html(.*)$ test.php [L] "
 

При обращение к старнице buh.html доступ к файлу отсутствует это понятно.
Как можно сделать при данных настройка его  в исключение?
Спасибо.

Всего записей: 34 | Зарегистр. 02-08-2009 | Отправлено: 08:53 04-03-2010
Cheery



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

Цитата:
Как можно сделать при данных настройка его  в исключение?  

по нормальному - никак. перекидывайте все запросы на скрипт и в нем и проверяйте настройки или авторизацию.
можно, конечно, добавить RewriteCond на проверку куки, если хочется.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:55 04-03-2010
bazzjr

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Как можно записать регуляркой(как можно компактнее) данную строку в htaccess:
 
search/any_name=345/name245=657/any_name=312/name13=845/any_name9803=190 и т.д.
 
И можно ли сильней сократить эту строку?
 
И еще вопрос:
 
Если пользователь ввел в адресную строку адрес вида - http://site.ru/?a=1&b=2
То есть ли возможность перенаправить его на страницу http://site.ru/search/?a=1&b=2 но при этом в адресной строке скрыть адрес http://site.ru/search/?a=1&b=2, а отобразить например http://site.ru/search/  ?
 
т.е. другими словами, как сделать так, чтобы в адресной строке не было видно запросов типа a=1&b=2?

Всего записей: 7 | Зарегистр. 09-02-2010 | Отправлено: 20:31 04-03-2010 | Исправлено: bazzjr, 07:21 05-03-2010
bazzjr

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

Всего записей: 7 | Зарегистр. 09-02-2010 | Отправлено: 15:24 09-03-2010
dacuan

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

Цитата:
Как можно записать регуляркой(как можно компактнее) данную строку в htaccess:  
 
search/any_name=345/name245=657/any_name=312/name13=845/any_name9803=190 и т.д

Например так:

Код:
RewriteRule  ^search/((([a-z0-9]+)=([^/]*)/)+) bin/myscript.php?vars=$1

а потом $_GET["vars"] разбирать вручную
 
Добавлено:

Цитата:
Если пользователь ввел в адресную строку адрес вида - http://site.ru/?a=1&b=2  
То есть ли возможность перенаправить его на страницу http://site.ru/search/?a=1&b=2 но при этом в адресной строке скрыть адрес http://site.ru/search/?a=1&b=2, а отобразить например http://site.ru/search/  ?  
 
т.е. другими словами, как сделать так, чтобы в адресной строке не было видно запросов типа a=1&b=2?

А зачем это надо? Чтобы нельзя было добавить в закладки ссылку на результаты поиска?

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 15:45 09-03-2010
russko



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

Цитата:
 
http://bla-bla-bla/report/month_detail.cgi?year=2010&month=03
 

Необходимо чтобы в браузере фактически отобразилась строка  

Цитата:
 
http://bla-bla-bla/report/user_detail.cgi?year=2010&month=03&user=alf&mode=month
 

Где юзер "alf" - пользователь прошедший авторизацию в .htaccess
 
Файл .htaccess содержит строку вида:  

Цитата:
 
AuthType Basic
AuthName "Server statistic"
AuthUserFile /usr/apache/local/.htpasswd
Require valid-user
 
RewriteEngine on
RewriteRule month_detail.cgi(.*)$ /report/user_detail.cgi?$1&user=%{REMOTE_USER}&mode=month [L]  
 

и никак это правило работать не хочет! Если вместо %{REMOTE_USER} явно указать ник alf то откроется страница, но без строки: "year=2010&month=03" в урле...
Подскажите как правильно написать правило чтобы решить задачку, описанную в начале?

Всего записей: 176 | Зарегистр. 20-07-2005 | Отправлено: 21:47 09-03-2010 | Исправлено: russko, 21:49 09-03-2010
bazzjr

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

Цитата:
А зачем это надо? Чтобы нельзя было добавить в закладки ссылку на результаты поиска?
 

dacuan не совсем так. Есть части сайта, где работа происходит посредством ajax и адресной строки(GET), и хотелось бы чтобы пользователь совсем ничего не видел бы в адресной строке, ну или видел то, что ему покажет админ.
 
Насчет укорочения

Цитата:
RewriteRule  ^search/((([a-z0-9]+)=([^/]*)/)+) bin/myscript.php?vars=$1  

спасибо понял логику.

Всего записей: 7 | Зарегистр. 09-02-2010 | Отправлено: 07:35 10-03-2010
dacuan

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

Цитата:
Есть части сайта, где работа происходит посредством ajax и адресной строки(GET), и хотелось бы чтобы пользователь совсем ничего не видел бы в адресной строке, ну или видел то, что ему покажет админ.

Не совсем понял. AJAX-запросы в адресной строке никак не светятся.
 
russko

Цитата:
и никак это правило работать не хочет! Если вместо %{REMOTE_USER} явно указать ник alf то откроется страница, но без строки: "year=2010&month=03" в урле...  
Подскажите как правильно написать правило чтобы решить задачку, описанную в начале?

все, что после знака "?" обрабатывается с помощью

Код:
RewriteCond  %{QUERY_STRING} <regex>


Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 17:13 10-03-2010
bazzjr

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dacuan ну  а все-таки не могли бы вы показать парочку примеров?или хотя бы рассказать логику работы?

Всего записей: 7 | Зарегистр. 09-02-2010 | Отправлено: 09:54 11-03-2010
Открыть новую тему     Написать ответ в эту тему

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