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

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



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

Цитата:
http://test2.ru/news_read?52425.php  

Тфу блин... как всегда упустишь что-то банальное Дело в том что RewriteRule не захватывает весь "news_read?52425.php" а только "news_read" так как вопросительный знак указывает что после него все что идет это данные предаваемые скрипту методом GET... сейчас начал думать как решить проблему...
 
Добавлено:
А вот и решение
 
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/news_read
RewriteCond %{QUERY_STRING} ^([0-9]+)\.php$
RewriteRule .* index.php?catalog=content&link=%1 [L]

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 15:08 13-07-2008
zerkms

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Delphi6
вот только смысла мало использовать такие странные, мягко говоря, урлы, когда под рукой есть модреврайт

----------
tvfёdor - оперативно уведомляет о раздачах rutracker | Блог об иммиграции в Новую Зеландию

Всего записей: 387 | Зарегистр. 07-05-2004 | Отправлено: 10:08 14-07-2008
Delphi6



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

Цитата:
вот только смысла мало использовать такие странные, мягко говоря, урлы, когда под рукой есть модреврайт

Это вы не по адресу Вам с таким вопросом и предложением непосредственно к DJSERV. Я же в свою очередь просто указал как решается его проблема. Хотя не вариант что у DJSERV был выбор какой входящий урл он хочет, возможно какой-то движок генерить такой урл, а ему нужно его передать в другом формате уже другому движку...

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 19:50 14-07-2008 | Исправлено: Delphi6, 20:02 14-07-2008
LenaSh

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
StasM
Добрый день.  
Будьте добры подскажите как реализовать, чтобы  
при запросе URLs вида  http://www.my_domen.ru/page?N, где N – любой численный или строковый параметр,  для всех внутренних страниц сайта желательно, чтобы сервер отдавал ответ HTTP/1.1 404 Not Found.  
Как это осуществить? какой код вставить в файл  .htaccess  

Всего записей: 2 | Зарегистр. 06-09-2008 | Отправлено: 23:22 06-09-2008
LenaSh

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день.  Люди!!!!!  Будьте добры подскажите как реализовать, чтобы  
при запросе URLs вида  http://www.my_domen.ru/page?N, где N – любой численный или строковый параметр,  для всех внутренних страниц сайта желательно, чтобы сервер отдавал ответ HTTP/1.1 404 Not Found.  
Как это осуществить? какой код вставить в файл  .htaccess  

Всего записей: 2 | Зарегистр. 06-09-2008 | Отправлено: 11:05 08-09-2008
Alexeyymanikin

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

http://www.beget.ru/art9.html - хорошая статья по mod_rewrite очень помогла все в одном месте, а также множество приемером http://www.beget.ru/art10.html

Всего записей: 2 | Зарегистр. 25-09-2008 | Отправлено: 20:15 28-09-2008
OLEX



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос по mod_rewrite
 
Вот по такому правилу
RewriteRule ^(.*)show_(.+)_(.+)_(.+)\.html$ /cgi-bin/forum.cgi?topic=$2&page=$3#post_$4
Апачь открывает страницу show_16_3_40.html  
как /cgi-bin/forum.cgi?topic=16&page=3%23post_40
Ну и ссылка на якорь получается не работает
Как это побороть?

Всего записей: 3591 | Зарегистр. 09-07-2002 | Отправлено: 07:01 27-10-2008 | Исправлено: OLEX, 07:14 27-10-2008
ra1n



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день
 
есть сайт, проиндексирован в яндексе без www, а надо с ними
сказали что mod_rewrite мне поможет

Цитата:
Чтобы сайт был с www, нужно сделать 301 редирект. Как это сделать? Например, используя .htaccess

 
Можете подсказать, как это сделать?

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 09:04 27-10-2008
Cheery



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

Цитата:
Как это побороть?


Цитата:
RewriteRule ^(.*)show_(.+)_(.+)_(.+)\.html$ /cgi-bin/forum.cgi?topic=$2&page=$3#post_$4 [NE]  

 
ra1n

Цитата:
Можете подсказать, как это сделать?

RewriteCond %{HTTP_HOST} ^site$
RewriteRule ^(.*)$ http://www.site$1

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 17:59 27-10-2008
OLEX



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


----------
Отче Наш, иже еси в моем PC. Да святится имя и расширение Твоё. ENTER.

Всего записей: 3591 | Зарегистр. 09-07-2002 | Отправлено: 21:06 27-10-2008
BigFlint



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
С mod_rewrite все понятно.
А как сделать чтобы в url была кирилица.
Например: http://site.ru/тест.
Браузеры в разных кодировках передают url серверу, так например FireFox 2.0 в windows-1251, Opera 9 с операционной системой Ubuntu вообще не пойму в какой кодировке.
 
Mod_rewrite при обращении к хосту переадресовывает на файл load.php
 
<?
$url = urldecode($_SERVER['REQUEST_URI']);
...
?>
 
Как узнать в какой кодировке переменная $url?
Может кто знает где взять готовое решение кирилицы в url?

Всего записей: 4 | Зарегистр. 02-03-2008 | Отправлено: 11:04 28-10-2008
Neuromancer



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Гуру mod_rewrite'а, подскажите, пожалуйста, как сделать следующее:
Дан адрес: site.ru/p1/p2/p3/p4/
На выходе нужно получить site.ru/index.php?par1=p1&par2=p2&par3=p3&par4=p4
Вот такая конструкция работает:

Код:
 
RewriteEngine On
Options +FollowSymlinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ /index.php?razdel=$1&type=$2&action=$3&id=$4 [L]
 

Однако, необходимо, чтобы работали еще и варианты типа
site.ru/p1/p2/p3
site.ru/p1/p2
site.ru/p1
т.е., передавались не все переменные

Всего записей: 542 | Зарегистр. 08-04-2002 | Отправлено: 11:12 31-10-2008 | Исправлено: Neuromancer, 11:57 31-10-2008
PEDKA



Улыбающийся КС
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Neuromancer
Всё просто.
Делаешь так:

Код:
RewriteRule ^(.*)$ index.php/?param=$1 [L]

 
А в самом начале скрипта просто разделяешь переменную param на массив, разделитель «/»
Например, в PHP:

Код:
$query_string=explode('/',$param);


----------
вот такая вот батва ©...
"Тестирование" это давно уже не помойка.
"Тестирование" это филиал "Помощи" ©

Всего записей: 15962 | Зарегистр. 04-05-2003 | Отправлено: 13:23 31-10-2008
Neuromancer



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

Цитата:
Neuromancer
Всё просто.
Делаешь так:
 
Код:
RewriteRule ^(.*)$ index.php/?param=$1 [L]
 
 
А в самом начале скрипта просто разделяешь переменную param на массив, разделитель «/»
Например, в PHP:
 
Код:
$query_string=explode('/',$param);  

Спасибо, учту. А вариант полностью на .htaccess, как я описал возможен вообще?
Хотя, твой, конечно, гораздо красивее и более гибкий.

Всего записей: 542 | Зарегистр. 08-04-2002 | Отправлено: 14:11 31-10-2008 | Исправлено: Neuromancer, 14:18 31-10-2008
xCedz



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

Всего записей: 48 | Зарегистр. 03-08-2005 | Отправлено: 16:16 31-10-2008 | Исправлено: xCedz, 17:01 31-10-2008
ZemoN



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вечер добрый всем!
Подскажите , а лучше покажите готовый пример передачи запроса php скрипту, который и выполняет проверку при посещении любой страницы статичного сайта.
просто хочу делать проверку по geoip.

Всего записей: 17 | Зарегистр. 09-11-2008 | Отправлено: 02:56 14-11-2008
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ZemoN
ну, например, обращение к html файлу передается скрипту и в качестве параметра - имя файла
RewriteRule   ^(.*)\.html$     script.php?file=$1
 
скрипт script.php проверяет ip и далее, к примеру, если все ок, то  
readfile($_GET['file']);
что не совсем правильно, так как надо проверить и исправить путь/имя к файло, а то так смогут прочитать любой доступный файл в системе, но как пример - пойдет.    


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

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



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а вот в
Цитата:
RewriteRule   ^(.*)\.html$     script.php?file=$1
можно как нить вместо
Цитата:
.*
указать список файлов по которым будит работать
Цитата:
script.php?file=$1
?
и где должно быть
Цитата:
readfile($_GET['file']
?
 
 
 

Всего записей: 17 | Зарегистр. 09-11-2008 | Отправлено: 22:03 14-11-2008 | Исправлено: ZemoN, 22:04 14-11-2008
Cheery



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

Цитата:
указать список файлов по которым будит работать

можно.. а не проще указать тип?  
 

Цитата:
и где должно быть  

в php коде  
 
ps: лучше наймите кого то, чтобы все сделали. одно дело, если бы схватывали на лету, а объяснять такие мелочи - мало желания

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:35 14-11-2008 | Исправлено: Cheery, 22:36 14-11-2008
ZemoN



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

Цитата:
ps: лучше наймите кого то, чтобы все сделали. одно дело, если бы схватывали на лету, а объяснять такие мелочи - мало желания
схватываю я нормально
 
я предполагаю выглядить должно так:
htaccess:

Код:
 
RewriteEngine on
RewriteRule   ^(.*)\.html$     script.php?file=$1
 

 
а сам script.php так:

Код:
 
<?php  
require_once("geoip.inc");  
$gi = geoip_open("GeoIP.dat",GEOIP_STANDARD);  
$ip = $_SERVER['REMOTE_ADDR'];  
if ($ip == '94.188.51.42') {readfile($_GET['file'];}
$code = geoip_country_code_by_addr($gi, $ip);  
if ($code=='RU')  
{  
header("Location: http://yandex.ru");  
}  
else    
{  
readfile($_GET['file'];  
}  
?>
 

 
просто не понял что значит
Цитата:
ак как надо проверить и исправить путь/имя к файло, а то так смогут прочитать любой доступный файл в системе

 
 

Всего записей: 17 | Зарегистр. 09-11-2008 | Отправлено: 23:03 14-11-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