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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lifeto

Цитата:
А как это сделать по средствам

вполне возможно, что проще будет сделать силами самой CMS (дописав или изменив ее код)
mod_rewrite не для подобных вещей, и уж тем более не для работы с диапазонами ip адресов (до 2.4)
если у вас apache 2.4, то возможно добавление условия к желаемому rewriterule вида

Код:
RewriteCond expr "-R '192.168.1.0/24'"

https://httpd.apache.org/docs/trunk/expr.html

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Т.е. с помощью .htaccess не возможно заблокировать доступ хотя бы одному конкретному IP не на весь сайт, а только на отдельную его страницу при условии, что страница, это не файл? А так же сделать, владельцу неугодного IP отдавалась ошибку 404 вместо 403 при доступе на определенную страницу сайта.
 
Сервер то править я не могу же, т.к. хостинг не личный - платный (не VPS).

Всего записей: 129 | Зарегистр. 23-02-2007 | Отправлено: 22:03 01-01-2018
Mavrikii

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

Цитата:
htaccess не возможно заблокировать доступ хотя бы одному конкретному IP не на весь сайт, а только на отдельную его страницу при условии

для одного IP можно, но все равно неудобно
для 404 можно внутренне перекидывать на несущеcтвующий адрес (будет виден, если CMS его отображает в сообщении об ошибке)
 
что то типа  

Код:
RewriteEngine On
RewriteCond %{REMOTE_ADDR} 192\.168\.0\.23
RewriteCond %{REQUEST_URI} ^/page\.html$
RewriteRule $ /404.html [L]

можно попробовать  

Код:
RewriteRule $ - [R=404,L]

остальное требует либо модификации cms или настроек сервера

Всего записей: 15093 | Зарегистр. 20-09-2014 | Отправлено: 22:06 01-01-2018 | Исправлено: Mavrikii, 22:08 01-01-2018
lifeto

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

Код:
RewriteCond %{REMOTE_ADDR} 192\.168\.0\.23
RewriteRule ^ - [R=404,L]
(теряется доступ для всего сайта для указанного IP)
 
однако, когда добавляю строчку:
Код:
RewriteCond %{REQUEST_URI} ^/page\.html$
или
Код:
RewriteCond %{REQUEST_URI} ^/page.html$ [NC]

то доступен весь сайт, даже страница page.html, т.е. блокировка доступа теряется.  
 

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

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

Цитата:
то доступен весь сайт, даже страница page.html

смотря куда пишете. должно быть до преобразований для CMS.
 
можно обойтись без условия для request_uri, а указать URL в RewriteRule

Всего записей: 15093 | Зарегистр. 20-09-2014 | Отправлено: 23:04 01-01-2018
zagorisback



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я в localhost
 
используемое программное обеспечение
 
https://ospanel.io/
 
Я хочу переписать URL-адрес
 
от
 
http://localhost/Testcerca2/cinema.php?id=1
 
в
 
http://localhost/Testcerca2/Lana Turner
 
но я не вижу папку
 

Код:
 
 
<IfModule rewrite mod>
RewriteRule ^cinema/([0-9]+)/$ /cinema.php?id=$1
</IfModule>
 
 

 
спасибо

Всего записей: 623 | Зарегистр. 05-05-2014 | Отправлено: 23:04 17-11-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zagorisback
когда вы научитесь читать? необязательно на русском, хотя бы источники на родном языке?
1)
Цитата:
RewriteEngine On  

2)
Цитата:
([0-9]+)

только цифры!
3)
Цитата:
^cinema

ожидается "cinema/цифры/" в URL, а не то, что вы написали

Всего записей: 15093 | Зарегистр. 20-09-2014 | Отправлено: 23:08 17-11-2018 | Исправлено: Mavrikii, 23:09 17-11-2018
zagorisback



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

 
 
Добавлено:

 

Код:
<IfModule rewrite mod>
RewriteEngine On  
RewriteRule ^cinema/([0-9]+)/$ /cinema.php?id=$1  
</IfModule>  

 
o $2 o $3  переменная

Всего записей: 623 | Зарегистр. 05-05-2014 | Отправлено: 23:18 17-11-2018 | Исправлено: zagorisback, 23:23 17-11-2018
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
 
На сайте используется вот такая система адресов:
https://site.ru/wowa/leto/  
 
При этом страница открывается и так: https://site.ru/wowa/leto/, и так: https://site.ru/wowa/leto.  
 
Хотелось бы сделать редирект с варианта без слэша на конце на вариант со слешем.
 
Точкой входа является файл vn.php, для которого имеется свой редирект.
 
В целом файл .htaccess выглядит так (в затрагиваемой части):
 
<IfModule mod_dir.c>
    DirectoryIndex vn.php
</IfModule>
 
# Редирект на слэш на конце
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]
 
 
# Редирект с www на без www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
 
 
# Редирект на точку входа
<IfModule mod_rewrite.c>  
  RewriteEngine On  
  RewriteBase /  
 
  RewriteCond %{REQUEST_FILENAME} !-f  
  RewriteCond %{REQUEST_FILENAME} !-d  
  RewriteRule ^(.*)$ /vn.php  
</IfModule>  
 
Проблема с главной страницей - она открывается без завершающего слэша: https://site.ru
 
И даже если в браузере набрать https://site.ru/ , то происходит редирект на  https://site.ru
 
Как это исправить?

Всего записей: 342 | Зарегистр. 07-09-2016 | Отправлено: 12:14 09-03-2023
Mavrikii

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

Цитата:
Проблема с главной страницей - она открывается без завершающего слэша

это поведение браузера, а не сервера.
 

Цитата:
Хотелось бы сделать редирект с варианта без слэша на конце на вариант со слешем.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]

Всего записей: 15093 | Зарегистр. 20-09-2014 | Отправлено: 23:11 09-03-2023
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Этот код не повлиял на результат - Главная ведет себя также.

Всего записей: 342 | Зарегистр. 07-09-2016 | Отправлено: 15:38 10-03-2023 | Исправлено: Vladsvn, 16:12 10-03-2023
Mavrikii

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

Цитата:
Главная ведет себя также.

Повторю - это особенность браузера

Всего записей: 15093 | Зарегистр. 20-09-2014 | Отправлено: 17:29 10-03-2023
Vladsvn

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

Всего записей: 342 | Зарегистр. 07-09-2016 | Отправлено: 18:58 10-03-2023
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
На практике получается так, что закрывающий слеш нужен только тогда, когда пользователь в браузере набрал адрес типа  https://site.ru/wowa/leto, чтобы превратить его в https://site.ru/wowa/leto/.  
 
Если же имеет место динамический адрес типа  https://site.ru/wowa/leto/?sdffgg8, в конце слеш добавлять не надо.
 
А если адрес имеет вид https://site.ru/wowa/leto?sdffgg8, то его надо превратить в https://site.ru/wowa/leto/?sdffgg8
 
Сложная задача... Можно ли ее решить   записью в .htaccess ?

Всего записей: 342 | Зарегистр. 07-09-2016 | Отправлено: 10:23 20-03-2023 | Исправлено: Vladsvn, 10:24 20-03-2023
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn
добавьте к тому, что выше
RewriteCond %{QUERY_STRING}  -n

Всего записей: 15093 | Зарегистр. 20-09-2014 | Отправлено: 10:48 20-03-2023 | Исправлено: Mavrikii, 10:48 20-03-2023
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сделал вот так:
# Редирект на слэш на конце.  
# Для динамического адреса слеш добавляется перед ним
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
RewriteCond %{QUERY_STRING}  -n
 
Все работает, как надо. Просто удивительно, как одна строка решила столько проблем!
 
Спасибо!

Всего записей: 342 | Зарегистр. 07-09-2016 | Отправлено: 13:23 20-03-2023
Mavrikii

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

Цитата:
одна строка решила столько проблем!

Ее нужно до rewriterule

Всего записей: 15093 | Зарегистр. 20-09-2014 | Отправлено: 13:30 20-03-2023
Vladsvn

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

Цитата:
Ее нужно до rewriterule

Первоначально я так и сделал.  
 
Но при таком варианте не работает вообще! Даже не добавляет слеш в самом простейшем случае, даже при отсутствии ?
 
 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteCond %{QUERY_STRING}  -n
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
 
Можно этот код подкорректировать так, что бы он правильно функционировал?

Всего записей: 342 | Зарегистр. 07-09-2016 | Отправлено: 13:55 20-03-2023 | Исправлено: Vladsvn, 21:59 20-03-2023
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn
а если так?
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]

Всего записей: 15093 | Зарегистр. 20-09-2014 | Отправлено: 22:10 20-03-2023
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот это  
/moskva/svetofor/27
превращает в  
/moskva/svetofor/27/ - нормально
 
Вот это  
/moskva/svetofor/27/?432423
превращает в
/moskva/svetofor/27/?432423 - нормально, не портит
 
Вот это
/moskva/svetofor/27?43242377
превращает в
/moskva/svetofor/27?43242377 - Не обрабатывает, проблема.
 
 

Всего записей: 342 | Зарегистр. 07-09-2016 | Отправлено: 22:50 20-03-2023
Открыть новую тему     Написать ответ в эту тему

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