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

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день.  
У меня схожая проблема. Задача почти идентичная: пользователи, пришедшие с определенного урла должные редиректиться на картинку вместо index.php  
Почему-то ничего не происходит.
 
Добавлено:
RewriteEngine on
RewriteCond  %{REMOTE_HOST}  ^badsite.ru.*
RewriteRule  ^/$                 /you-suck.htm  [L]
Вот такая конструкция не работает. Не могли бы подсказать, что не так? В логах ошибок нет, просто не срабатывает.

Всего записей: 10 | Зарегистр. 18-07-2005 | Отправлено: 14:34 07-07-2007
Caslix

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возникла такая задача: ранее у меня была админка с урлами вида:  
http://www.domen.ru/?module=publications&id=12 Сейчас я перешел на другую админку, где урл этой же страницы имеет вид:  
http://www.domen.ru/articles/article1.html
 
Мне необходимо сделать 301 редирект, например, со страницы http://www.domen.ru/?module=publications&id=12 на http://www.domen.ru/articles/article1.html
 
Сейчас по урлу http://www.domen.ru/?module=publications&id=12 выдается главная.
 
Помогите, пожалуйста!

Всего записей: 4 | Зарегистр. 11-07-2007 | Отправлено: 11:41 11-07-2007
Cheery



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

Цитата:
RewriteCond  %{REMOTE_HOST}  ^badsite.ru.*  

а точнее? как точно запись выглядит?
 
Caslix

Цитата:
Мне необходимо сделать 301 редирект, например, со страницы http://www.domen.ru/?module=publications&id=12 на http://www.domen.ru/articles/article1.html  

я не вижу связи.. если у вас связь адреса статьи с ее id в таблице, то анализируйте скриптом и перекидывайте на нужный url.. mod_rewrite тут не поможет


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

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

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

Цитата:
я не вижу связи.. если у вас связь адреса статьи с ее id в таблице, то анализируйте скриптом и перекидывайте на нужный url.. mod_rewrite тут не поможет  

 
Расскажите, пожалуйста, по подробнее...  
 
Добавлено:

Цитата:
я не вижу связи.. если у вас связь адреса статьи с ее id в таблице, то анализируйте скриптом и перекидывайте на нужный url.. mod_rewrite тут не поможет

 
 
Возможно такое решение?
 
<?
$ref=$_SERVER['REQUEST_URI'];
if ($ref='/?module=publications&id=12/')
{
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.domen.ru/articles/article1.html');
exit();
}
?>
 
Насколько правильно не знаю

Всего записей: 4 | Зарегистр. 11-07-2007 | Отправлено: 09:37 12-07-2007
Dillz

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery,
вот так запись и выглядит:
RewriteEngine on
RewriteCond %{REMOTE_HOST} ^badsite.ru.*
RewriteRule ^/$ /you-suck.htm [L]  
Или у меня в синтаксисе ошибки есть?
Задача не допустить на свой сайт людей, приходящих с одного сайта (здесь: badsite.ru), так чтобы они вместо титульной страницы редиректились на страницу you-suck.htm находящуюся в корне сайта.

Всего записей: 10 | Зарегистр. 18-07-2005 | Отправлено: 12:35 12-07-2007
Cheery



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

Цитата:
Расскажите, пожалуйста, по подробнее...  

подробнее что?
еще раз.. как понять, что для id=12 нужно запрашивать article1.html?
или это только один такой линк?
 

Цитата:
Возможно такое решение?  

это уже php
да, возможно, но не в таком виде как

Цитата:
if ($ref='/?module=publications&id=12/')  

для чего тут /  плюс в условии пишется ==
но это все равно не относится к данной теме
 
Dillz

Цитата:
вот так запись и выглядит:  


Цитата:
RewriteCond %{REMOTE_HOST} ^badsite.ru.*  

RewriteCond %{HTTP_REFERER} ^http://badsite.ru/.*$

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:18 13-07-2007 | Исправлено: Cheery, 04:45 13-07-2007
Caslix

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

Цитата:
подробнее что?  
еще раз.. как понять, что для id=12 нужно запрашивать article1.html?  
или это только один такой линк?  

 
Мне необходимо сделать редиректы для поисковой системы со старых страниц на новые. Я перешел на другую CMS, поэтому связи старых урлов уже нет. Это все равно что к любому домену добавить ?module=publications&id=12 и выдваться будет главная.
 
Какое может быть решение в таком случае, время поджимает, т. к. сайт уже на новых урлах и редиректы нужны сейчас.
 
Добавлено:
Проблема решена ))) таким образом (вставляется в файл index.php):
 
<?
$url=$_SERVER['REQUEST_URI'];
if ($url=='/?module=custompage&id=820')
{
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.site.ru/vakan/');
exit();
}
else if ($url=='/?module=custompage&id=1111)
{
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.site.ru/order/');
exit();
}
?>
 
Спасибо Cheery, натолкнул на правильное действие )
 
Осталось сделать редирект со всех страниц вида http://www.site.ru/?efasdfasdfasdf на главную, чтобы небыло одинаковых страниц... Если есть варианты, поделитесь, пожалуйста

Всего записей: 4 | Зарегистр. 11-07-2007 | Отправлено: 10:08 13-07-2007
Dillz

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery,  
спасибо за помощь, но эта конструкция RewriteCond %{HTTP_REFERER} ^http://badsite.ru/.*$
почему-то нужного редиректа не вызывает.
Чего-то непонятное, бьюсь уже долго, эффекта нет.

Всего записей: 10 | Зарегистр. 18-07-2005 | Отправлено: 14:48 13-07-2007
Cheery



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

Цитата:
Чего-то непонятное, бьюсь уже долго, эффекта нет.

включаем логирование и смотрим как и что обрабатывается
эта конструкция должна отсекать переходы с реферами
 
Caslix

Цитата:
Проблема решена

это глупое решение.. пара лишних символов в строке или другой порядок и все.. не сработает
 

Цитата:
Осталось сделать редирект со всех страниц вид

запрос вида /?fgfgfg и так запрашивает главную страницу.
все, что после знака вопроса - аргументы запросы.. передаются той страницы, что идет до ?
а до него идет главная страница по умолчанию

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:26 13-07-2007
Dillz

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery, похоже это какой-то баг mod_rewrite применительно к Wordpress. Там выходит двойная конструкция (одна исходная, вторая - то, что пытаюсь сделать) упорно не вызывающая нужного эффекта.
"Смотреть логирование" - имеется в виду ошибки? Так их и нет в логе. Чертовщина.

Всего записей: 10 | Зарегистр. 18-07-2005 | Отправлено: 22:42 13-07-2007
Cheery



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

Цитата:
"Смотреть логирование" - имеется в виду ошибки?  

включить на время rewritelog и просмотреть его.


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:53 13-07-2007
Dillz

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery, его только хостер может включить?
Я написал в тех. поддержку, получил такой ответ:
SetEnvIfNoCase Referer "^http://badsite.ru" out=1
SetEnvIfNoCase Referer "^http://badsite2.ru" out=1
Order Allow,Deny
Deny from env=out
Allow from all
Что это за конструкция такая? И она, насколько я понимаю, просто запрещает доступ с определенных урлов, а никаким редиректом и не пахнет. Так?

Всего записей: 10 | Зарегистр. 18-07-2005 | Отправлено: 21:23 14-07-2007
Cheery



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

Цитата:
И она, насколько я понимаю, просто запрещает доступ с определенных урлов, а никаким редиректом и не пахнет. Так?

да


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:26 14-07-2007
Dillz

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery, извиняюсь за очередное беспокойство. А такая вот конструкция имеет смысл?
 
SetEnvIf REMOTE_HOST badsite.ru REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /only_for_you.html

Всего записей: 10 | Зарегистр. 18-07-2005 | Отправлено: 23:31 14-07-2007
Cheery



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

Цитата:
А такая вот конструкция имеет смысл?  

попробуй - узнаешь.
но сдается мне, что ты просто тут что то не так написал

Цитата:
спасибо за помощь, но эта конструкция RewriteCond %{HTTP_REFERER} ^http://badsite.ru/.*$
почему-то нужного редиректа не вызывает.  

 
 
возможно надо экранировать точки в названии сайта.. иначе это будет частью регулярного выражения
badsite\.ru

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:59 14-07-2007
Dillz

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Проверил все варианты, даже вариант тех. поддержки с банальным запретом не работает Экранирование, кстати, тоже не меняет ситуацию.

Всего записей: 10 | Зарегистр. 18-07-2005 | Отправлено: 01:42 15-07-2007
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dillz
надоел флейм.. сейчас у себя протестирую
 
Добавлено:

Код:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/only_for_you.html  
RewriteCond %{HTTP_REFERER} ^http://badsite.ru/.*$
RewriteRule ^.*$ /only_for_you.html [R]


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:44 15-07-2007
Charodei

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Решил завести себе блог.
Выбрал движок b2evolution http://b2evolution.net/
И вот возникли проблемы с url.
Писал свой вопрос у них на форуме сайта, в ответ ничего, одна тишина ...
Может это и нельзя осуществить?
В админке сайта написано, что можно задать свой урл с помощью какой-то заглушки или mod_rewrite.  
Вот поэтому я и здесь, думаю наверное можно изменить.
 
Что мне нужно прописать в .htaccess?
 
Есть ссылки:  
http://test.ru/index.php/2007/07/10/test1  
or  
http://test.ru/index.php/2007/07/10/1232  
 
Если ссылки открывать без прописывания там index.php, то они не открываются.
 
Хочу, чтобы было по человечески:  
http://test.ru/2007/07/10/test1  
http://test.ru/2007/07/10/1232

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Начинаю разбираться с mod_rewrite, возникли вопросы:
1. Почему-то на все попытки использования директив: RewriteLog, RewriteMap он выдает Internal Server Error.
Что с этим делать? Может быть, надо что-нибудь включить?
 
2. Написал в .htaccess правила:

Код:
 
RewriteRule    ^(.*)a(.*)$  $1A$2
RewriteRule    ^(.*)b(.*)$  $1B$2
RewriteRule    ^(.*)c(.*)$  $1C$2
RewriteRule ^(.*).aspx$ /testphp/phpinfo.php?$1
 

Вызываю: http://192.168.0.1/abc/default.aspx
Я думал, query_string будет ABC/defAult.Aspx или что-то в этом роде.
А оно пишет: aBC/default.Aspx/default.aspx/default.aspx/default  
Как так?
 
PHP Version 4.4.7, Server version: Apache/1.3.37 (Unix)

Всего записей: 281 | Зарегистр. 05-04-2006 | Отправлено: 16:53 16-07-2007
Cheery



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

Цитата:
Почему-то на все попытки использования директив: RewriteLog, RewriteMap он выдает Internal Server Error

читать error_log..
вполне возможно, что не подключен mod_rewrite модуль

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 17:41 16-07-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