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

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

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

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

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

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

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

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

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

Всего записей: 15040 | Зарегистр. 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 ?

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

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

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

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

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



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

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

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

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

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

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

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

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



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

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

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

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

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

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



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

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

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

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

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

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


Всего записей: 15040 | Зарегистр. 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

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

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

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

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

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

 

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

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

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



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

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

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

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

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

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 21:09 29-09-2017
IHmG

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
какие best practices существуют в использования mode_rewrite? Для чего в принципе его применяют?
 
Сам столкнулся, что ЧПУ нужно поддерживать. В CMS такая настроечка есть. Выключаешь ЧПУ - часть функционала отваливается. Сам пока читаю на первой страничке топика, может ответ уже и дальше есть... тогда заренее извиняюсь. Решил спросить, может не у меня одного такой вопрос возникнет
 
 
 
 
Добавлено:
Алиас
Цитата:
Прописывается в httpd.conf в секци VirtualHost

ткните, пожалуйста, где именно rtfm (в редакции для чайников) ... пока читаю этот топик
пока смотрю https://httpd.apache.org/docs/2.0/ru/vhosts/
 
Добавлено:

Цитата:
Цикл статей, довольно полная и хорошо написанная документация: Часть 1, Часть 2, Часть 3, Часть 4.  

Ссылка http://sitemaker.ru/technologies/webserver/mod_rewrite/ в Часть 1 - не открывается

Всего записей: 248 | Зарегистр. 07-06-2006 | Отправлено: 12:31 27-12-2017 | Исправлено: IHmG, 13:01 27-12-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
IHmG
если у вас cms поддерживает чпу, то в комплекте есть и htaccess для этого (или она сама генерит). зачем вы пытаетесь что то написать самостоятельно?

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 17:56 27-12-2017
IHmG

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Потому что есть ошибка. На счёт htaccess в комплекте с cms (в моем случае это modx evo) спасибо, поищу. Я собственно пытаюсь просто ошибку пофиксить, попутно изучая технологии, возможно к этой ошибке причастные

Всего записей: 248 | Зарегистр. 07-06-2006 | Отправлено: 19:10 27-12-2017
Mavrikii

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

Цитата:
спасибо, поищу

https://docs.modx.com/revolution/2.x/administering-your-site/using-friendly-urls
http://htaccess.ru/cms/modx/
 
если у вас старая версия, а используете современный Apache, то могут быть различия в htaccess, так как в версии апача 2.4 произошли изменения директив

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 20:04 27-12-2017 | Исправлено: Mavrikii, 20:06 27-12-2017
lifeto

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу подсказать, заранее спасибо за любую помощь.
 
Как можно запретить доступ определенному IP адресу, а так же диапазону IP адресов к определенному URL сайта вида htttp:/site.ru/catalog/page.html (при этом page.html это не файл, т.к. сайт на CMS) и отправить посетителей с неугодными IP на ошибку 404
 
А так же как сделать тоже самое, но только для части url, например для htttp:/site.ru/catalog/catalog1/block1/block2/ , где block1 - начало блокировки
 
Уже целый день пытаюсь найти решение в интернете, но результата практически нет, нашел только блокировку всего сайта для определенных IP, либо страниц сайта, когда страница является файлом .html.

Всего записей: 129 | Зарегистр. 23-02-2007 | Отправлено: 21:05 01-01-2018 | Исправлено: lifeto, 21:07 01-01-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lifeto
mod_rewrite для этого не нужен.
не проверял, но для 2.4

Код:
<Location /catalog/page.html>
<RequireNone>
 Require ip 111.111.111.111/24
</RequireNone>
</Location>

и выдаст 403, а не 404
 
для регулярок есть LocationMatch или Location ~

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 21:25 01-01-2018 | Исправлено: Mavrikii, 21:26 01-01-2018
lifeto

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
А как это сделать по средствам .htaccess? Сайт на внешнем хостинге.

Всего записей: 129 | Зарегистр. 23-02-2007 | Отправлено: 21:46 01-01-2018
Открыть новую тему     Написать ответ в эту тему

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