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

Компьютерный форум 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

 

Deadooshka


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

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


вариантов можно кучу найти..
например, добавлять пустой параметр к урлу при срабатывании правила, а в случае редиректа проверять его отсутствие.
Код: Выделить весь код
RewriteCond %{QUERY_STRING} pid\=107983
RewriteCond %{QUERY_STRING} !fortest\=1
RewriteRule index.php http://mysite.com/Kategorija_1/page_1.html? [R=301,L]

RewriteRule ^Kategorija_1/page_1.html$ index.php?pid=107983&fortest=1 [NC, QSA, L]
вообще то при наличии флага L в обоих правилах должно и так работать, но реальное действие этого флага мне до конца не понятно (и нигде подробного описания не нашел). т.е. есть два трактования:
1) правило последнее, и окончательный выход из всех правил;
2) только один цикл в самом правиле (а без флага L одно правило будет переписывать урл до тех пор, пока не будет совпадения).
опыт показывает, что утверждение 2 вернее...
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:45, 24-07-2009 | #111



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

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


Новый участник


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

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


Всем привет!
Вопрос следующий.
Проблема переадресации с помощью mod_rewrite.
имеется исходный url, например:
такой
http://www.example.com/index.php >хочется получить такой > http://www.example.com/
или
http://www.example.com/index.php?page10 >хочется получить такой > http://www.example.com/page10
или такой
http://www.example.com/index.php?xxx=yyyy&zzzz=wwww >хочется получить такой > http://www.example.com/xxx/yyyy/zzzz/wwww

или на худой конец такие:
http://www.example.com#xxx#yyyy#zzzz#wwww

Попытки решения:
1.

RewriteEngine on
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1

преобразует
http://www.example.com/xxx=yyyy&zzzz=wwww
в
http://www.example.com/index.php?xxx=yyyy&zzzz=wwww

Просто убирает индексный файл и знак вопроса из URL.

2.
Второй способ не работает:

RewriteEngine on
RewriteBase /

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{REQUEST_URI} [A-Za-z0-9]*
RewriteRule ^([A-Za-z0-9]*)$ index.php?$1

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{REQUEST_URI} [A-Za-z0-9]*#[A-Za-z0-9]*
RewriteRule ^([A-Za-z0-9]*)#?([A-Za-z0-9]*)$ index.php?$1=$2

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{THE_REQUEST} [A-Za-z0-9]*#[A-Za-z0-9]*#[A-Za-z0-9]*
RewriteRule ^([A-Za-z0-9]*)#([A-Za-z0-9]*)#([A-Za-z0-9]*)$ index.php?$1=$2&$3

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{THE_REQUEST} [A-Za-z0-9]*#[A-Za-z0-9]*#[A-Za-z0-9]*#[A-Za-z0-9]*
RewriteRule ^([A-Za-z0-9]*)#?([A-Za-z0-9]*)#?([A-Za-z0-9]*)#?([A-Za-z0-9]*)$ index.php?$1=$2&$3=$4

Не совсем понятно как сравнивать RewriteCond почему в данном примере сравнение не работает

3. Были и другие эксперименты но пока радостного мало
==================================================================

Основные сложности в том, что длинна адреса может меняться т.е.
от http://www.example.com/
до http://www.example.com/index.php?xxx=yyyy&zzzz=wwww (http://www.example.com/xxx/yyyy/zzzz/wwww)
и еще при использовании адресов типа http://www.example.com/xxx/yyyy/zzzz/wwww
браузер запрашивает файлы (css, img ...) при указании относительного адреса с базой для URL
http://www.example.com/xxx/yyyy/zzzz/wwww соотвественно http://www.example.com/xxx/yyyy/zzzz/
как лучше решить эту проблему в случае использования '/', можно использовать '#' но это не совсем то что надо.


Может знает стандартное решение данного вопроса. Буду благодарен, подскажите.

Благодарю за внимание!!!

Отправлено: 13:57, 29-07-2009 | #112


Deadooshka


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

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


Цитата User2010:
http://www.example.com/index.php >хочется получить такой > http://www.example.com/ »
лучше директивой
Код: Выделить весь код
DirectoryIndex index.php
Цитата User2010:
http://www.example.com/index.php?page10 >хочется получить такой > http://www.example.com/page10 »
Код: Выделить весь код
RewriteRule ^page([0-9]+)$ index.php?page$1 [L]
Цитата User2010:
http://www.example.com/index.php?xxx=yyyy&zzzz=wwww >хочется получить такой > http://www.example.com/xxx/yyyy/zzzz/wwww »
Код: Выделить весь код
RewriteRule ^([^\/]+)/([^\/]+)/([^\/]+)/([^\/]+)$ index.php?$1=$2&$3=$4 [L]
Цитата User2010:
или на худой конец такие:
http://www.example.com#xxx#yyyy#zzzz#wwww »
так нельзя (# - рабочий символ)
Цитата User2010:
браузер запрашивает файлы (css, img ...) при указании относительного адреса с базой для URL »
при использовании псевдостатики все относительные адреса дб корневыми (с передним слешем или доменом), либо псевдостатика дб без директорий...

Отправлено: 03:34, 30-07-2009 | #113


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


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

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


Привет всем. Пожалуйста помогите наладить перенаправление?
Перенесли сайт с тестового домена new.site.ru на основной домен _www.site.ru
И нужно сделать так, чтобы при обращении к тестовому домену (допустим с поисковиков) срабатывало перенаправление на основной домен.
К примеру, запрошена страница
Цитата:
new.site.ru/index.php?option=com_virtuemart&page=shop.browse
а нужно перекинуть на
Цитата:
_www.site.ru/index.php?option=com_virtuemart&page=shop.browse
Попробовал, почитав документацию и, по совету провайдера, сделать так:
Цитата:
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteCond %{HTTP_HOST} ^new\.site\.ru [NC]
RewriteRule ^/(.*) http://www.site.ru/$1 [R=301,L]
Поместил код в .htaccess и бросил его в DocumentRoot тестового сайта.

Ничего не происходит.

Что не так?

Последний раз редактировалось Sham, 29-09-2009 в 13:08. Причина: прямые ссылки не надо


Отправлено: 08:39, 29-09-2009 | #114


Deadooshka


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

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


последняя строка
Код: Выделить весь код
RewriteRule ^/?(.*)$ http://www.site.ru/$1 [R=301,L]
передний слеш, если правило в контексте сервера (в httpd.conf), в .htaccess отсекается...

Цитата d0ublezer0:
Options +FollowSymlinks »
первой строкой лучше.

в итоге (с соблюдением регистров)
Код: Выделить весь код
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^new\.site\.ru [NC] 
RewriteRule ^/?(.*)$ http://www.site.ru/$1 [R=301,L]

Последний раз редактировалось Sham, 29-09-2009 в 16:06. Причина: +

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:15, 29-09-2009 | #115


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


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

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


Sham, спасибо огромное.
Тогда еще вопрос - а если страница на новом сайте не существует, то как перенаправить на главную?

Отправлено: 15:24, 29-09-2009 | #116


Deadooshka


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

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


d0ublezer0, добавьте
Код: Выделить весь код
ErrorDocument 404 http://www.site.ru
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:08, 29-09-2009 | #117


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


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

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


Пожалуйста помогите с такой задачей:
посл перенастройки SEF модуля на сайте поменялись все ссылки. А по поисковым сисмемам народ приходит на "старые адреса".
нужно поправить переход. Например придя по любой из ссылок:
Код: Выделить весь код
http://example.com/vmchk/musornyie-konteyneryi/
http://example.com/vmchk/musornyie-konteyneryi/view-all-products.html
Посетитель должен попасть на
Код: Выделить весь код
http://example.com/musornyie-konteyneryi.html
И тоже самое для WWW в начале адреса.

Т.е. убрать из строки vmchk/ и заменить последний слеш на .html

Спасибо.

Последний раз редактировалось Sham, 26-11-2009 в 20:43. Причина: example.com!


Отправлено: 13:59, 26-11-2009 | #118


Deadooshka


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

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


Код: Выделить весь код
RewriteRule ^vmchk\/([^\/]+) http://example.com/$1.html [R,L]

Отправлено: 20:52, 26-11-2009 | #119


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


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

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


Sham, спасибо, только вот еще задача - некоторые ссылки уже имеют html в конце:
/vmchk/plastikovyie-bochki-i-bidonyi.html
И получается что по вашему правилу для них формируется два расширения .html
Как переделать?

Отправлено: 14:21, 30-11-2009 | #120



Компьютерный форум 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




 
Переход