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


Система IP-видеонаблюдения "Линия". Скачать бесплатную демо-версию для 16 камер. НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

Открыть новую тему     Написать ответ в эту тему

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
Mavrikii

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

Цитата:
Правильный получает, без точки в конце.  

значит фронт исправляет запрос и убирает сам точку, только без переадресации браузеру.
 

Цитата:
По-любому есть. Тогда что надо, его перезапустить или как?

у вас есть доступ к фронту? сомневаюсь, раз не могли преобразование символов включить.
 

Цитата:
Вопрос в том, как этот "кеш" удалить.

со временем пройдет, либо добавлять ?случайная_строка_число в конце адреса

Всего записей: 4953 | Зарегистр. 20-09-2014 | Отправлено: 08:38 29-08-2017 | Исправлено: Mavrikii, 08:38 29-08-2017
xerpal



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

Цитата:
  # delete "." from frontpage
  RewriteCond %{HTTP_HOST} ^(.+?)\.$  
  RewriteRule ^ http://%1%{REQUEST_URI} [L,R,NE]
 
А как переписать этот запрос под конкретный домен? Может так заработает? Под my-site.ru ?

Всего записей: 895 | Зарегистр. 08-10-2011 | Отправлено: 08:46 29-08-2017
Mavrikii

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

Цитата:
А как переписать этот запрос под конкретный домен?

ну какой конкретный? сами же сказали, что точки в HTTP_HOST нет, что вы хотите переписывать?

Всего записей: 4953 | Зарегистр. 20-09-2014 | Отправлено: 08:48 29-08-2017
xerpal



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Стоп, так это неверный тогда запрос. Нужно не хост проверять
 
Может атк верно?  
 

Цитата:
 RewriteCond %{THE_REQUEST} ^(.+?)\.$  
  RewriteRule ^ http://%1%{REQUEST_URI} [L,R,NE]

Или не {THE_REQUEST} надо проверять?

Всего записей: 895 | Зарегистр. 08-10-2011 | Отправлено: 08:50 29-08-2017
Mavrikii

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

Цитата:
Или не {THE_REQUEST} надо проверять?

точки после домена там не будет. посмотрите все переменные окружения в phpinfo() - если точки нигде нет, значит никак. только если насильно не делать первую переадресацию, запоминая ее в куке или еще где. можете с помощью javascript определять если точка и перекидывать на другое написание (не сработает для поисковиков)

Всего записей: 4953 | Зарегистр. 20-09-2014 | Отправлено: 08:53 29-08-2017
xerpal



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А как я посмотрю переменные окружения по адресу mysite.ru. ? То есть с точкой в конце.  
Куда точка то относится, когда сервер такой запрос получает? Нужна то только главная...

Всего записей: 895 | Зарегистр. 08-10-2011 | Отправлено: 08:55 29-08-2017 | Исправлено: xerpal, 08:56 29-08-2017
Mavrikii

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

Цитата:
А как я посмотрю переменные окружения по адресу

я столько раз уже писал - в php смотрите вывод phpinfo()
он покажет переменные окружения выставленные сервером для хоста.
можно print_r($_SERVER);

Всего записей: 4953 | Зарегистр. 20-09-2014 | Отправлено: 08:56 29-08-2017 | Исправлено: Mavrikii, 08:57 29-08-2017
xerpal



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Блин, mysite.ru./phpinfo.php  и правда нигде не выдает эту точку в phpinfo. Может такое через php можно сделать... Хотя как в php выловить эту точку?

Всего записей: 895 | Зарегистр. 08-10-2011 | Отправлено: 08:58 29-08-2017 | Исправлено: xerpal, 09:00 29-08-2017
Mavrikii

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

Цитата:
Может такое через php можно сделать... Хотя как в php выловить эту точку?

никак, она туда просто не доходит. два варианта я описал выше.

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


Всего записей: 4953 | Зарегистр. 20-09-2014 | Отправлено: 09:04 29-08-2017
xerpal



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

Цитата:
  #RewriteCond %{HTTP_HOST} !^domain\.zone$
#RewriteRule ^(.*)$ http://domain.zone/$1 [L,R=301]  

Вот эта директива в теории должна работать, но не работает. Но походу опять же не работает, потому что http_host там верный (((
 
Добавлено:
Mavrikii

Цитата:
два варианта я описал выше

Это цитата ниже?  

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

Какую первую?  

Цитата:
можете с помощью javascript определять если точка и перекидывать на другое написание (не сработает для поисковиков)

Нужно именно для поисковиков
 
Добавлено:
Ок, значит с точкой нерешаемый вопрос без доступа в nginx.
А с этим кодом что не так, как его починить?  

Цитата:
RewriteBase /
 
# If there are caps, set HASCAPS to true and skip next rule
RewriteRule [A-Z] - [E=HASCAPS:TRUE,S=1]
 
# Skip this entire section if no uppercase letters in requested URL
RewriteRule ![A-Z] - [S=28]
 
# Replace single occurance of CAP with cap, then process next Rule.
RewriteRule ^([^A]*)A(.*)$ $1a$2
RewriteRule ^([^B]*)B(.*)$ $1b$2
RewriteRule ^([^C]*)C(.*)$ $1c$2
RewriteRule ^([^D]*)D(.*)$ $1d$2
RewriteRule ^([^E]*)E(.*)$ $1e$2
RewriteRule ^([^F]*)F(.*)$ $1f$2
RewriteRule ^([^G]*)G(.*)$ $1g$2
RewriteRule ^([^H]*)H(.*)$ $1h$2
RewriteRule ^([^I]*)I(.*)$ $1i$2
RewriteRule ^([^J]*)J(.*)$ $1j$2
RewriteRule ^([^K]*)K(.*)$ $1k$2
RewriteRule ^([^L]*)L(.*)$ $1l$2
RewriteRule ^([^M]*)M(.*)$ $1m$2
RewriteRule ^([^N]*)N(.*)$ $1n$2
RewriteRule ^([^O]*)O(.*)$ $1o$2
RewriteRule ^([^P]*)P(.*)$ $1p$2
RewriteRule ^([^Q]*)Q(.*)$ $1q$2
RewriteRule ^([^R]*)R(.*)$ $1r$2
RewriteRule ^([^S]*)S(.*)$ $1s$2
RewriteRule ^([^T]*)T(.*)$ $1t$2
RewriteRule ^([^U]*)U(.*)$ $1u$2
RewriteRule ^([^V]*)V(.*)$ $1v$2
RewriteRule ^([^W]*)W(.*)$ $1w$2
RewriteRule ^([^X]*)X(.*)$ $1x$2
RewriteRule ^([^Y]*)Y(.*)$ $1y$2
RewriteRule ^([^Z]*)Z(.*)$ $1z$2
 
# If there are any uppercase letters, restart at very first RewriteRule in file.
RewriteRule [A-Z] - [N]
 
RewriteCond %{ENV:HASCAPS} TRUE
RewriteRule ^/?(.*) /$1 [R=301,L]
 
mysite.ru/NODE/2112 - переводит в неверные mysite.ru/node/2112/2112/2112/2112

Всего записей: 895 | Зарегистр. 08-10-2011 | Отправлено: 09:42 29-08-2017 | Исправлено: xerpal, 09:53 29-08-2017
Mavrikii

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

Цитата:
А с этим кодом что не так, как его починить?  
 

вы еще не проснулись?

Цитата:
флаг [DPI] добавьте к каждому правилу с переделкой букв.  
потому, что все, что находится глубже данной диры (раз реального пути нет) является PATH_INFO и цепляется каждый раз заново  

 

Цитата:
Какую первую?

любую первую к хосту. правильная или нет - не знаете, но насильно перекидываете на правильный URL, запоминая это в куке. если "браузер" не запоминает куку, то у него будет бесконечный редирект.

Всего записей: 4953 | Зарегистр. 20-09-2014 | Отправлено: 10:15 29-08-2017
elektron



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Просьба помочь с mod_rewrite для отдельной страницы /index.php?page=page&id=25
Этот адрес нужно преобразовать в /metro.php

Всего записей: 242 | Зарегистр. 08-02-2003 | Отправлено: 10:47 29-09-2017 | Исправлено: elektron, 10:47 29-09-2017
Mavrikii

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
elektron
было в теме уже не раз.
 

Код:
RewriteEngine On  
RewriteBase /  
RewriteCond %{QUERY_STRING} ^page=page&id=25$
RewriteRule ^/?index.php /metro.php [R=301,L]

правда если напишут id первым, а page вторым, то не сработает, хотя для сервера это равнозначно.

Всего записей: 4953 | Зарегистр. 20-09-2014 | Отправлено: 21:09 29-09-2017
Открыть новую тему     Написать ответ в эту тему

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

Компьютерный форум Ru.Board » Интернет » Web-программирование » mod_rewrite: документация, готовые решения, вопросы

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2017

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru