Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » mod_rewrite etc.

Ответить
Настройки темы
mod_rewrite etc.

Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120


Конфигурация

Профиль | Отправить PM | Цитировать


Вот только недавно познакомился с этим замечательным модулем

Вот что я вынес из данного знакомства-с помощью mod_rewrite можно:
1) Самое распространённое использование-перезапись урлов, например есть урл index.php?forum=webmaster&topic=45
можно переписать в index.php/webmaster/45, что для некоторых поисковых машин намного более лучший вариант
2)запретить доступ к определённому файлу
RewriteRule ^file.ext$ - [F]
3)запретить доступ определённому браузеру, сборщику почты, доступ с определённого айпи или пришедшим с определённого сайта
RewriteCond %{HTTP_USER_AGENT} ^Browser_Name [OR]
RewriteCond % {REMOTE_HOST} ^www.badsite.com$ [OR]
RewriteCond % {REMOTE_ADDR} ^169.45.23.01$
RewriteRule ^.*$ - [F]

Это было самое распространённое применение данного модуля, но есть ещё много всяких интересных хитростей:
наприсер я недавно нашёл такое применение-при вызове страницы pic.html, нужно показывать картинку дня, поэтому можно переписать этот урл в pic-06-06.html c помощью серверных переменных TIME_MON и TIME_DAY
RewriteRule ^pic.html$ pic-%{TIME_MON}-%{TIME_DAY}.html

Или ещё кому нравится можно переписать файл index.php кому очень захочется в index.bmp

Если кто ещё знает интересные применения данного модуля, то постите тут

-------
Fortes fortuna adiuvat


Отправлено: 14:41, 06-06-2004

 

Пользователь


Сообщения: 77
Благодарности: 1

Профиль | Отправить PM | Цитировать


Подскажите пожалуйста.
Имею два вопроса. В данный момент в .htaccess прописано:

Код: Выделить весь код
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.php$
RewriteRule ^(.*)$ $1.php
1. При написании адреса без "php", переход на неё осуществляется нормально и расширение не отображается в адресной строке, НО, при следующем переходе на сайте по ссылке, например сайт.ru/browse.php, расширение уже прописывается.

2. Хочу чтобы для *.html, *.htm файлов выше описанное тоже распространялось. Подскажите пожалуйста код.

Заблаговременно спасибо.

Отправлено: 11:45, 11-04-2012 | #181



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


.


Сообщения: 2192
Благодарности: 555

Профиль | Сайт | Отправить PM | Цитировать


Цитата Lossless.Senator:
для *.html, *.htm файлов выше описанное тоже распространялось »
для каждого расширения две строки
Код: Выделить весь код
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^.+$ $0.php [L]
Цитата Lossless.Senator:
например сайт.ru/browse.php, расширение уже прописывается »
непонятно, что нужно
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:45, 11-04-2012 | #182


Пользователь


Сообщения: 77
Благодарности: 1

Профиль | Отправить PM | Цитировать


Sham
Спасибо. По поводу второго видимо это не представляется возможным. Я предполагал что реврайт может вырезать расширения при переходе с одной ссылки на другую.

Отправлено: 06:49, 12-04-2012 | #183


.


Сообщения: 2192
Благодарности: 555

Профиль | Сайт | Отправить PM | Цитировать


Через внешний редирект, поэтому как можно выше.
Код: Выделить весь код
RewriteCond %{THE_REQUEST} \.(?:php|html?)[\?\ ]
RewriteRule ^/?(.+)\.(?:php|html?)$ http://%{HTTP_HOST}/$1 [R,L]
Это лишняя нагрузка. Можно без RewriteCond, но с флагами END на правилах выше (только последние версии апача).
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:40, 12-04-2012 | #184


Пользователь


Сообщения: 77
Благодарности: 1

Профиль | Отправить PM | Цитировать


Sham
Большое спасибо! Это работает и выглядит хорошо. Процитирую то, что мне ответили по этому коду на другом ресурсе:

Цитата:
ну вы хотите, чтобы у вас все ссылки были с .php, и при каждом запросе делать редирект на адрес без расширения, да еще и 302?

подобные вещи надо на крайний случай делать.
я в своем движке реализовал работу без расширений, но у меня помимо переадресации ссылки с расширением на ссылку без нее (при этом я сделал и проверку существования файла), движок загоняет в буфер html код страницы, а потом обрабатывает его корректируя ссылки.

кстати, у вас возникнет в этой ситуации проблема с POST данными - они просто потеряются при переадресации.
Всё же хочется реализовать работу без расширений без особого ущерба для производительности и просто сделать это максимально корректно.

Последний раз редактировалось Lossless.Senator, 12-04-2012 в 09:53.


Отправлено: 08:58, 12-04-2012 | #185


.


Сообщения: 2192
Благодарности: 555

Профиль | Сайт | Отправить PM | Цитировать


Цитата Lossless.Senator:
проблема с POST данными - они просто потеряются при переадресации. »
добавьте условие
Код: Выделить весь код
RewriteCond %{REQUEST_METHOD} =GET
и в атрибутах action форм указывайте адрес в нужном/правильном виде. Если есть POST-запросы в ajax, то и там поправьте пути.

Цитировать никого не надо, в крайнем случае мануал. Точность ответа зависит только от конкретности заданного вопроса.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:14, 12-04-2012 | #186


Пользователь


Сообщения: 77
Благодарности: 1

Профиль | Отправить PM | Цитировать


Скажите пожалуйста, является ли такой редирект на https нормальным или есть более лучший способ?

Код: Выделить весь код
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Отправлено: 19:06, 22-04-2012 | #187


.


Сообщения: 2192
Благодарности: 555

Профиль | Сайт | Отправить PM | Цитировать


Подмаски и жадные квантификаторы тут не нужны, и текст в условии можно просто сравнить. И флаги не помешают.
Оптимизируем.
Код: Выделить весь код
RewriteCond %{HTTPS} =off
RewriteRule .? https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:17, 22-04-2012 | #188


Пользователь


Сообщения: 77
Благодарности: 1

Профиль | Отправить PM | Цитировать


Как всегда благодарю, Sham

Отправлено: 20:36, 22-04-2012 | #189


Пользователь


Сообщения: 77
Благодарности: 1

Профиль | Отправить PM | Цитировать


Как сделать чтобы при таком коде

Код: Выделить весь код
RewriteRule ^PRIMER$ browse.php [L]
в адресной строке отображалось именно PRIMER.

Подскажите пожалуйста код для конкретного примера и глобальный, чтобы распространялся на всё на сервере.

Последний раз редактировалось Lossless.Senator, 25-04-2012 в 07:37.


Отправлено: 18:23, 24-04-2012 | #190



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » mod_rewrite etc.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочее - mod_rewrite .htaccess Wimpheling Общий по Linux 0 08-10-2013 14:57
Разное - Включение модуля mod_rewrite Lenivets1 Программирование и базы данных 5 13-02-2012 20:00
mod_rewrite Jaels Программное обеспечение Linux и FreeBSD 2 06-01-2012 12:09
mod_rewrite kishert Вебмастеру 3 10-03-2009 06:52
mod_rewrite PHANTOM777 Вебмастеру 1 20-07-2008 10:00




 
Переход