Ru-Board.club
← Вернуться в раздел «Web-программирование»

» mod_rewrite: документация, готовые решения, вопросы

Автор: Cheery
Дата сообщения: 10.06.2010 19:13
Tstf

Цитата:
Как поправить?

перекодировать в вашу кодировку.. а вообще этим лучше не заниматься
Автор: Tstf
Дата сообщения: 10.06.2010 21:23
так как мне перекодировать? с помощью utf8_decode() ?

мне просто необходимо использовать метог GET

Разобрался

urldecode и urlencode
Автор: DarkSmoke
Дата сообщения: 23.06.2010 19:16
Добрый день.
Уважаемые гуру. Подскажите как мне привести в нормальный вид строку типа
_http://pool/index.php?city=2&firm=1, где:
city - это ИД города, а хотелось бы что бы нормально выводилось и если есть такая возможность то на русском.
firm - ИД Фирмы, холтелось бы что бы тоже на русском, если такое возможно.

В итоге хочу получить, _http://pool/Челябинск/ББС ну или _http://pool/chelyabinsk/bbc
Автор: Mamay
Дата сообщения: 24.06.2010 11:00
итить колотить...
DarkSmoke
тебе нужно логику ссылок переделать )
если хочешь чтобы было http://pool/Челябинск/ББС то нужно что-бы ссылки у тебя выглядели как http://pool/index.php?city=Челябинск&firm=ББС

иначе нихрена не выйдет
Автор: DarkSmoke
Дата сообщения: 24.06.2010 12:22
А как тогда такой запрос будет с БД MySQL работать?
Автор: DarkSmoke
Дата сообщения: 29.06.2010 15:59
Помогите составить запрос
у меня ссылки могут быть
http://mydomen/
http://mydomen/index.php?city=piter
http://mydomen/index.php?city=piter&firm=bbs

Хочу получить в итоге
http://mydomen/piter
http://mydomen/piter/bbs

Сейчас у меня только так работает

Код: RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?city=$1 [L,QSA]
Автор: Cheery
Дата сообщения: 01.07.2010 20:34
DarkSmoke

Цитата:
сли добавляю RewriteRule ^(.*)$ index.php?city=$1&firm=&2 [L,QSA], то тогда не работает ссылка вида

должна работать - условия выше должны срабатывать только когда нет конечного файла или директории

Цитата:
firm=&2

что такое &2???? если $2, то откуда вы его берете? хоть бы просмотрели документацию, что ли..
$1, $2 и так далее - означает совпадение в скобка в регулярном выражении. у вас же одна пара скобок и не может быть $2 вообще
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)/(.*)$ index.php?city=$1&firm=$2 [L,QSA]
но это под второй случай только
Автор: israel_rider
Дата сообщения: 04.07.2010 22:05
Помогите, плиз. Не как не могу понять, чем отличаются
%{REQUEST_URI}
от
%{THE_REQUEST}
Автор: Cheery
Дата сообщения: 04.07.2010 23:18
israel_rider

Цитата:
%{REQUEST_URI}

/пусть/файл

Цитата:
%{THE_REQUEST}

GET /путь/файл HTTP/1.0
Автор: israel_rider
Дата сообщения: 04.07.2010 23:48
Cheery, помогите пожалуйста.
Есть URL http://host/dir1/dir2/ .
Я хочу, что бы при заходе на этот URL пользователь перенаправлялся на http://host/dir1/dir2/dir3/index.php .
Пишу

RewriteEngine On

RewriteCond %{REQUEST_URI} ^\/dir1\/dir2\/$
RewriteRule ^(.*)$ /~dir1/dir2/dir3/index.htm?%1 [R]

и всё вроде работает правильно, пользователь перенаправляется.
Но вот я захотел сделать это правило более универсальным, что бы не прописывать пути в нескольких местах при переносе с хостинга на хостинг, а прописывать путь только в одном месте, в RewriteBase.
Пишу

RewriteEngine On

RewriteBase /dir1/dir2/

RewriteCond %{REQUEST_URI} ^\/$
RewriteRule ^(.*)$ dir3/index.htm?%1 [R]

Не работает.
В чём ошибка?
Автор: substrackto
Дата сообщения: 06.07.2010 00:09
israel_rider
не понял как оно у вас работает, но может быть ошибка в: RewriteCond, если уже изменилась базовая точка отсчета(RewriteBase), то от нее нужно все запросы перенаправлять.
Тоесть убрать вообще RewriteCond, или изменить в базе /dir1/dir2, а в RewriteCond дописать что может быть закрывающий слэш.

RewriteBase /dir1/dir2
RewriteCond %{REQUEST_URI} ^(\/?)$
Автор: israel_rider
Дата сообщения: 06.07.2010 06:43
К сожалению, изучив внимательно документацию, я пришёл к выводу, что моя идея в принципе не верна.
Дело в том, что там написано, что действие RewriteBase распостраняется только на RewriteRule, и не распостраняется на RewriteCond. То есть получается, что в моём случае использование RewriteBase бессмысленно.
Автор: Tstf
Дата сообщения: 09.07.2010 18:53
Помоги реализовать следующее

Адрес вида продавец.site.com должен соответствовать site.com/продавец/

Как это через htaccess сделать? И возможно ли?
Автор: Cheery
Дата сообщения: 09.07.2010 19:34
Tstf

Цитата:
Как это через htaccess сделать? И возможно ли?

htaccess тут поможет относительно.
для начала нужно прописать Wild Card для поддоменов в DNS
Затем настроить аналогично обработку любым поддоменов апачем..
и только потом уже возиться с mod_rewrite


http://en.wikipedia.org/wiki/Wildcard_DNS_record
http://steinsoft.net/index.php?site=programming/articles/apachewildcarddomain
и все.. потом в корне htaccess в котором смотреть
RewriteCond %{HTTP_HOST} !www.domain.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).domain.com [NC]
RewriteRule (.*) %2/$1 [L]
Автор: Apart
Дата сообщения: 11.07.2010 19:35
Проблема с закрывающим слэшем:

Есть сайт с доменами типа
site.ru и site.com, которые на шаред-хостинге привязаны на 1 папку (чтобы для каждого по отдельному субдомену не создавать, тем более, что на site.com совсем немного страниц для англоязычных пользователей)

Основной сайт на русском - site.ru с кучой файлов и папок, где есть такой htaccess

===
Options +Includes +FollowSymLinks -Indexes
AddHandler server-parsed .shtml .html
DirectoryIndex index.shtml index.htm index.php index.html
AddDefaultCharset windows-1251
CookieTracking on
CookieExpires "1 years"

RewriteEngine on

RewriteRule ^siteen/ - [L]
RewriteCond %{HTTP_HOST} (www\.)?site\.com [NC]
RewriteRule (.*) siteen/$1 [L]
===

Папка /siteen/ создана для размещения там файлов на английском языке и чтобы контент оттуда показывался, если юзер заходит на адрес site.com (а не site.ru)

В самой папке /siteen/ есть htaccess с таким содержимым
===
Options +Includes +FollowSymLinks -Indexes
AddHandler server-parsed .shtml .html
DirectoryIndex index.shtml index.htm index.php index.html
AddDefaultCharset windows-1251
CookieTracking on
CookieExpires "1 years"

RewriteEngine on

ErrorDocument 404 http://www.site.com
===


В папке /siteen/ есть подпапки типа /profile/, /news/ и т.п., где лежат файлы index.html и пр.


В чем проблема:

когда набираешь в браузере адрес site.com/profile/ с закрывающим слэшем, то все нормально отображается

когда набираешь в браузере адрес site.com/profile без закрывающего слэша, то контент опять же показывается нормальный, но в браузере при этом строка начинает выглядеть как site.com/siteen/profile/

Т.е. появляется название папки (и закрывающий слэш в конце). Закрывающий слэш появляется или нет - без разницы, но вот названия папки не хотелось бы, чтобы было видно в адресе.

Что нужно поменять, чтобы нормально работало? Перепровобал различные варианты, пока не получилось.

При этом если вбивать титульную страницу site.com без слэша и site.com/ со слэшем, то в обоих вариантах они нормально показываются, а папка в адрес не добавляется.



Автор: Tutankhamon86
Дата сообщения: 20.08.2010 19:52
Добрый вечер

Пожалуйста подскажите как можно реализовать перенаправление с кодом 301 для:

http://site.com/co_by_01/<разные файлы> -> http://subdomen.site.com/co_by_01/<разные файлы>
http://site.com/co_by_02/<разные файлы> -> http://subdomen2.site.com/co_by_02/<разные файлы>
http://site.com/wa_by_01/<разные файлы> -> http://subdomen.site.com/wa_by_01/<разные файлы>
http://site.com/wa_by_02/<разные файлы> -> http://subdomen2.site.com/wa_by_02/<разные файлы>

Заранее спасибо
Автор: DmitryV
Дата сообщения: 29.08.2010 19:18
Подскажите пожалуйста - задача оставить достум к сайту с 1-2 IP адресов ко всем ресурсам сайта, при запросе ресурсов любых со всех остальных IP показать страницу например test.htm в корне сайта.
Автор: spin5
Дата сообщения: 06.09.2010 15:04
Сайт сделан на Flash, проиндексирован Yandex.

1)
По поисковому запросу выдает ссылку непосредственно на один из *.swf файлов в каталоге.
Но, необходимо, чтобы поисковики (Yandex) по прежнему индексировали подобные файлы, а пользователь по ссылке, указанной Yandex (напр. .../intro.swf) попадал бы только на главную страницу - index.php.

Прочитал про конфигурирование .htaccess и mod_rewrite все, но, все равно возникают вопросы, так как главного - опыта, не хватает.

Подскажите, плз, как исправить.

2)
Если написать с условием, то такая задача для меня представляет некоторую трудность. Правильно ли будет так (взято из примера для запрета просмотра сайта, кроме поисковых роботов):

Код: RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} !^yandex.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !^googlebot.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !^.*gaisbot.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !^rambler.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !^aport.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !^metacrawler.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !^msnbot.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !^.*crawler.* [NC]
RewriteRule ^intro.swf$ index.php [NC,L]
Автор: azema
Дата сообщения: 15.09.2010 23:32
Добрый день, господа!
У меня вопрос: можно ли средствами mod_rewrite прописать выражение для редиректа 301 с одного сайта на другой, конкретнее - с domen_hostera.ru/site.ru на просто site.ru?!
Просто мой сайт проиндексирован в 2-х вариантах и хотелось бы убрать неглавное зеркало (domen_hostera.ru/site.ru). Принимаются также другие варианты, помогите пожалуйста!!!
Автор: andrewtishkin
Дата сообщения: 16.09.2010 00:24
azema
Полезный совет: сначала спросить в Google, составив запрос из ключевых слов
В вашем случае - 301 на новый домен
Смотрим первые результаты, делаем новый запрос по новым ключевым словам: Redirect 301

Итого получим, например, три статьи. Думаю, их будет достаточно для составления нужного правила:
Настраиваем 301 редирект на новый домен
301 редирект – корректная переадресация через htaccess и php
Что такое 301 Permanent Redirect и как его применять

Удачи
Автор: diseese
Дата сообщения: 16.09.2010 09:50
подскажите пожалуйста, не могу разобраться:

была ссылка /commercial/realty/garage/sell/ для которой было правило:

Код:
RewriteRule ^(commercial/.+)(sell|buy|lease|rent)/(rss/)?        /$1$3?request_target=$2    [PT,QSA]
Автор: armid
Дата сообщения: 21.09.2010 21:46
Ребята, выручайте
У меня есть сайт (site.ru) и есть форум (site.ru/forum)
Сейчас у меня форум открывается по адрему www.site.ru/forum.index.php
Мне нужно через redirect сделать, что б он открывался по адресу:
site.ru/forum
Я в файл .htaccess, который находится в корневой папке форума вот это:

Код: Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.site.ru/forum$ [NC]
RewriteRule ^(.*)$ http://site.ru/forum/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://site.ru/forum/ [R=301,L]
Автор: armid
Дата сообщения: 22.09.2010 10:43
пользователи ru-board подскажите. Очень нужно, а спросить не у кого
Автор: PROFMONSTER
Дата сообщения: 24.09.2010 14:43
ничего себе сколь здесь исписанно, пробежался через раз и не нашел..((мож где пропустил)

Помогите мне с проблемой в mod_rewrite...

вот я пишу в .htaccess


Код:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)$ index.php/$1 [QSA]
Автор: dacuan
Дата сообщения: 24.09.2010 14:53

Цитата:
Как это исправить, у меня очень много страниц, переделывать их всех не раельно...
Помогите пожалуиста..

Можно воспользоваться тегом BASE, но лучше переделать.

Добавлено:
armid
А поподробнее чего требуется добиться?
есть www.site.ru/forum.index.php хочется чтобы форум работал как site.re/forum ? И при чем здесь редирект?
Автор: holden321
Дата сообщения: 21.10.2010 13:33
помогите с простым вопросом
нужно переделывать ссылки
из http://mysite.ru/ в http://mysite.ru/dir/
из http://mysite.ru/index.php в http://mysite.ru/dir/index.php
и т.д.

т.е. добавлять папку в начале

делаю так
RewriteEngine on
rewriterule (.*) /dir/$1 [L]

и нефига не работает
в логах повторяется цикл внутренних редиректов
браузер выдает Internal Server Error

[more=Читать дальше..][no] strip per-dir prefix: Z:/home/mysite.ru/www/ ->
applying pattern '(.*)' to uri ''
rewrite '' -> '/dir/'
trying to replace prefix Z:/home/mysite.ru/www/ with /
internal redirect with /dir/ [INTERNAL REDIRECT]
strip per-dir prefix: Z:/home/mysite.ru/www/dir/ -> dir/
applying pattern '(.*)' to uri 'dir/'
rewrite 'dir/' -> '/dir/dir/'
trying to replace prefix Z:/home/mysite.ru/www/ with /
internal redirect with /dir/dir/ [INTERNAL REDIRECT]
add path info postfix: Z:/home/mysite.ru/www/dir/dir -> Z:/home/mysite.ru/www/dir/dir/
strip per-dir prefix: Z:/home/mysite.ru/www/dir/dir/ -> dir/dir/
applying pattern '(.*)' to uri 'dir/dir/'
rewrite 'dir/dir/' -> '/dir/dir/dir/'
trying to replace prefix Z:/home/mysite.ru/www/ with /
internal redirect with /dir/dir/dir/ [INTERNAL REDIRECT]
add path info postfix: Z:/home/mysite.ru/www/dir/dir -> Z:/home/mysite.ru/www/dir/dir/dir/
strip per-dir prefix: Z:/home/mysite.ru/www/dir/dir/dir/ -> dir/dir/dir/
applying pattern '(.*)' to uri 'dir/dir/dir/'
rewrite 'dir/dir/dir/' -> '/dir/dir/dir/dir/'
trying to replace prefix Z:/home/mysite.ru/www/ with /
internal redirect with /dir/dir/dir/dir/ [INTERNAL REDIRECT]
add path info postfix: Z:/home/mysite.ru/www/dir/dir -> Z:/home/mysite.ru/www/dir/dir/dir/dir/
strip per-dir prefix: Z:/home/mysite.ru/www/dir/dir/dir/dir/ -> dir/dir/dir/dir/
applying pattern '(.*)' to uri 'dir/dir/dir/dir/'
rewrite 'dir/dir/dir/dir/' -> '/dir/dir/dir/dir/dir/'
trying to replace prefix Z:/home/mysite.ru/www/ with /
internal redirect with /dir/dir/dir/dir/dir/ [INTERNAL REDIRECT]
add path info postfix: Z:/home/mysite.ru/www/dir/dir -> Z:/home/mysite.ru/www/dir/dir/dir/dir/dir/
strip per-dir prefix: Z:/home/mysite.ru/www/dir/dir/dir/dir/dir/ -> dir/dir/dir/dir/dir/
applying pattern '(.*)' to uri 'dir/dir/dir/dir/dir/'
rewrite 'dir/dir/dir/dir/dir/' -> '/dir/dir/dir/dir/dir/dir/'
trying to replace prefix Z:/home/mysite.ru/www/ with /
internal redirect with /dir/dir/dir/dir/dir/dir/ [INTERNAL REDIRECT]
add path info postfix: Z:/home/mysite.ru/www/dir/dir -> Z:/home/mysite.ru/www/dir/dir/dir/dir/dir/dir/
strip per-dir prefix: Z:/home/mysite.ru/www/dir/dir/dir/dir/dir/dir/ -> dir/dir/dir/dir/dir/dir/
applying pattern '(.*)' to uri 'dir/dir/dir/dir/dir/dir/'
rewrite 'dir/dir/dir/dir/dir/dir/' -> '/dir/dir/dir/dir/dir/dir/dir/'
trying to replace prefix Z:/home/mysite.ru/www/ with /
internal redirect with /dir/dir/dir/dir/dir/dir/dir/ [INTERNAL REDIRECT]
add path info postfix: Z:/home/mysite.ru/www/dir/dir -> Z:/home/mysite.ru/www/dir/dir/dir/dir/dir/dir/dir/
strip per-dir prefix: Z:/home/mysite.ru/www/dir/dir/dir/dir/dir/dir/dir/ -> dir/dir/dir/dir/dir/dir/dir/
applying pattern '(.*)' to uri 'dir/dir/dir/dir/dir/dir/dir/'
rewrite 'dir/dir/dir/dir/dir/dir/dir/' -> '/dir/dir/dir/dir/dir/dir/dir/dir/'
trying to replace prefix Z:/home/mysite.ru/www/ with /
internal redirect with /dir/dir/dir/dir/dir/dir/dir/dir/ [INTERNAL REDIRECT]
add path info postfix: Z:/home/mysite.ru/www/dir/dir -> Z:/home/mysite.ru/www/dir/dir/dir/dir/dir/dir/dir/dir/
strip per-dir prefix: Z:/home/mysite.ru/www/dir/dir/dir/dir/dir/dir/dir/dir/ -> dir/dir/dir/dir/dir/dir/dir/dir/
applying pattern '(.*)' to uri 'dir/dir/dir/dir/dir/dir/dir/dir/'
rewrite 'dir/dir/dir/dir/dir/dir/dir/dir/' -> '/dir/dir/dir/dir/dir/dir/dir/dir/dir/'
trying to replace prefix Z:/home/mysite.ru/www/ with /
internal redirect with /dir/dir/dir/dir/dir/dir/dir/dir/dir/ [INTERNAL REDIRECT]
add path info postfix: Z:/home/mysite.ru/www/dir/dir -> Z:/home/mysite.ru/www/dir/dir/dir/dir/dir/dir/dir/dir/dir/
strip per-dir prefix: Z:/home/mysite.ru/www/dir/dir/dir/dir/dir/dir/dir/dir/dir/ -> dir/dir/dir/dir/dir/dir/dir/dir/dir/
applying pattern '(.*)' to uri 'dir/dir/dir/dir/dir/dir/dir/dir/dir/'
rewrite 'dir/dir/dir/dir/dir/dir/dir/dir/dir/' -> '/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/'
trying to replace prefix Z:/home/mysite.ru/www/ with /
internal redirect with /dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/ [INTERNAL REDIRECT]
add path info postfix: Z:/home/mysite.ru/www/dir/dir -> Z:/home/mysite.ru/www/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/
strip per-dir prefix: Z:/home/mysite.ru/www/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/ -> dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/
applying pattern '(.*)' to uri 'dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/'
rewrite 'dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/' -> '/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/'
trying to replace prefix Z:/home/mysite.ru/www/ with /
internal redirect with /dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/dir/ [INTERNAL REDIRECT][/no][/more]
Автор: siriusall
Дата сообщения: 27.10.2010 10:06
Есть сайт.
Сайт многоязычный.
Из-за этого вид ссылки на одну и туже страницу может иметь вид:

http://www.test.ru/test

так и:

http://www.test.ru/rus/test

В .htaccess есть запись:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(rus|ukr|blr|de|frn|eng)*/?([^?]+)?$ index.php?lang=$1&link=$2 [NC,QSA,L]

Хотелось узнать, возможно, сделать перенаправление как в случае с www и без www
(Отключение поддержки многоязычности не помогает)

RewriteCond %{HTTP_HOST} ^test.ru
RewriteRule (.*) http://www.test.ru/$1 [R=301,L]


Что бы на сайте было без /rus/

Заранее большое спасибо.
Автор: Sergeant
Дата сообщения: 08.11.2010 17:04

Код: RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^212\.112\.140\.[111-127]$
RewriteRule .* - [E=SECTION:M]
Автор: dacuan
Дата сообщения: 09.11.2010 16:12
Sergeant

Цитата:
Это как понимать? Опытным путём установлено, что проблема появляется, если диапазон начинается с >111. Т.е. 112, 113, 114. В частности нужен диапазон 114-127.

Дело в том, что mod_rewrite не умеет сравнивать диапазоны чисел, он работает только со строками. Т.е. ваше правило должно выглядеть так:

Код: RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^212\.112\.140\.11[4-9]$ [OR]
RewriteCond %{REMOTE_ADDR} ^212\.112\.140\.12[0-7]$
RewriteRule .* - [E=SECTION:M]
Автор: bedrik
Дата сообщения: 24.11.2010 09:34
Есть сайт с сms движком www.domen.ru/cms/index.php
Причем в корневом катологе www.domen.ru есть свои страницы, которые должны отображатся при обращении к ним.

Надо чтоб в браузере при обращение к www.domen.ru/cms/index.php был отображен адрес www.domen.ru/index.php и можна было работать с cms.

Не работает Rewrite.
Пример 1.
RewriteEngine On

RewriteCond $1 !^(cms)
RewriteRule ^(.*)$ /cms/$1 [L]

Пример 2.

#RewriteRule ^cms/ - [last]
#RewriteCond %{HTTP_HOST} (www.)?domen.ru [nocase]
#RewriteRule (.*) cms/$1 [last]

Что не так.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

Предыдущая тема: PHP: Регулярные выражения (RegExp, Regular, eregi, preg)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.