Войти

Показать полную графическую версию : mod_rewrite etc.


Страниц : 1 2 3 4 5 6 7 8 [9] 10

Sham
04-04-2010, 19:30
если этого файла нет то должно выполняться перенаправление »
перед правилом дб условие
RewriteCond %{REQUEST_FILENAME} !-f

kamaikin
04-04-2010, 22:51
Цитата kamaikin:
если этого файла нет то должно выполняться перенаправление »
перед правилом дб условие
Код:
RewriteCond %{REQUEST_FILENAME} !-f »

Не работает ни так:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^image/small/([a-z0-9_]{2})([a-z0-9_]+)\.jpg(/?)+$ cache/image/small/$1/$1$2.jpg [L]
RewriteRule ^image/(small|big|original|pda)/([a-z0-9_]+).(jpg|png|gif)(/?)+$ images.php?size=$1&name=$2&ext=$3 [L]

ни так:
RewriteRule ^image/small/([a-z0-9_]{2})([a-z0-9_]+)\.jpg(/?)+$ cache/image/small/$1/$1$2.jpg [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^image/(small|big|original|pda)/([a-z0-9_]+).(jpg|png|gif)(/?)+$ images.php?size=$1&name=$2&ext=$3 [L]

Без [L] тоже пробовал(((

Sham
05-04-2010, 00:37
RewriteCond действует только на следующий RewriteRule
экранируйте точку, и (/?)+ »
это глупость...
Без [L] тоже пробовал((( »
L в основном ставится для перестраховки от зацикливания, но в этом правиле оно не грозит.

kamaikin
05-04-2010, 06:37
Sham! Вы уж простите клинического идиота, но никак не могу заставить работать.... или если файла нет выкидывает 404 или всегда отрабатывает скрипт....

Sham
05-04-2010, 15:20
kamaikin, у вас два правила фактически одинаковые (могут совпадать на один урл), поэтому путаница. имхо можно местами поменять (правило с RewriteCond на первое место), либо поискать другое решение, более ясное. тут вам никто не помощник, ибо все нюансы известны только вам...

droZel
05-04-2010, 15:21
зачем флаг N? »
чтобы от второго правила вернуться к первому, если не стоит слеш в конце, он его добавляет, а обработчик строки о слешем - первое правило. Я неправильно понимаю?
Почему при ссылке href="/ru/page2", он отправляет запрос верно, но в строке адреса ничего не меняется?

Sham
05-04-2010, 15:32
чтобы от второго правила вернуться к первому »
неправильно. там где http:// или [R] - значит клиенту отправляется заголовок Location и процесс завершается.

мануал (перевод) можно тут (http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html) почитать, хотя имхо не идеальный...

appc
02-07-2010, 14:09
Пожалуйста, подскажите такую вещь:

Нужно все урлы вида
/asdfasfd.html
Преобразовывать в
/asdfasfd.html?parameter=znach

Вставил в конфиг апача:
RewriteRule (.*)\.html$ $1.html?parameter=znach [R]

Браузер выдает:
Ошибка 310 (net::ERR_TOO_MANY_REDIRECTS): Обнаружено слишком много переадресаций.

Если в конфиге апача пишу:
RewriteRule (.*)\.html$ $1.html?parameter=znach [L]
Тогда не работает перенаправление.

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

Sham
02-07-2010, 22:27
циклит, потому что шаблон слишком общий и нет флага L (R - для внешнего редиректа), нужно условие или более конкретный шаблон.

RewriteCond %{QUERY_STRING} !parameter\=znach
RewriteRule ^(.*)\.html$ $1.html?parameter=znach [L]

appc
03-07-2010, 13:01
RewriteCond %{QUERY_STRING} ! »
Спасибо.

Я ещё тупанул ... это не единственное правило ... поставил его в самый верх... и заработало.

Artem-Samsung
11-07-2010, 03:35
В каком то из скриптов Wordpress, взял пример .htaccess для того что бы любой адрес, который обращается к веб-серверу обращался к файлу index.php

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Но мне нужно вписать еще строку, типа:
RewriteRule captcha.jpg /modules/captcha.php

Куда не втыкну, не получается.
Все равно все ссылается на index.php

Если вставить просто код:
DirectoryIndex index.php
Options +FollowSymlinks
RewriteEngine On

RewriteRule captcha.jpg /modules/captcha.php
, то работает, но нужно еще сохранить ту настройку, что бы любой адрес обращался к одному файлу

Sham
11-07-2010, 04:37
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d »
третьим можно добавить
RewriteCond %{REQUEST_URI} !captcha\.jpg
и свое потом куда угодно.
или сделайте файл captcha.jpg и положите куда надо (проверка идет на отсутствие файла и папки).

maasja
10-01-2011, 20:05
Здравствуйте.
Есть сайт. Он доступен по двум адресам: один адрес - домен сайта , второй адрес - сервисный адрес сайта. Мне нужно чтобы при переходе на домен сайта, он его перенаправлял на сервисный адрес сайта, причем так чтобы, все что после домена сайта, переносилось на сервисный адрес сайта, например:

www.site.com redirect --> www.service_address.com
www.site.com/home.html redirect --> www.service_address.com/home.html
www.site.com/css/style.css redirect --> www.service_address.com/css/style.css
первое что пришло в голову это на .htaccess следующей код:
Options +FollowSymLinks
RewriteEngine On
RewriteRule (.*) http://www.service_address.com/$1 [R=301,L]
, но поскольку два адреса сайта работают с одной директории, то получается вечный редирект. Как это сделать(желательно с помощью .htaccess)?
Большое спасибо..

Sham
11-01-2011, 07:29
нужно условие добавить
RewriteCond %{HTTP_HOST} ^(www\.)?site\.com$
RewriteRule ^(.*)$ http://www.service_address.com/$1 [R=301,L]

или так попробовать (чуть быстрее вроде)
RewriteCond %{HTTP_HOST} ^(www\.)?site\.com$
RewriteRule .? http://www.service_address.com%{REQUEST_URI} [R=301,L]

maasja
11-01-2011, 12:22
Sham, большое спасибо!!
кстати, маленький вопрос, уже давно хотел знать на него ответ.
Обязательно ли перед точками ставить слеш ^(www\.)?site\.com$ »?
Часто в статьях или еще где-то перед точками стоит слеш, но когда я сам пишу правила, то их не ставлю, и вроде работает))
Только что удалил слеши из выше написанного примера, и тоже работает)

P.S. если вместо www, может быть любое значение, то писать так:
RewriteCond %{HTTP_HOST} ^(.\.)?site\.com$ ?
Спасибо.

Sham
11-01-2011, 12:37
если вместо www, может быть любое значение »
RewriteCond %{HTTP_HOST} site\.com$
. - любой символ, в т.ч. и точка, поэтому нужно экранировать. rtm.

maasja
11-01-2011, 13:33
Sham, как всегда большое спасибо)
RewriteCond %{HTTP_HOST} site\.com$ код почему-то не работает, а так работает
RewriteCond %{HTTP_HOST} .site\.com$ ..

Sham
12-01-2011, 12:48
вопрос в содержимом %{HTTP_HOST}, куда смотрит регексп. Точка там ничего не решает, слева нет якоря на начало ^.

velocat
16-01-2011, 08:47
Подскажите знающие, всю голову уже сломал...
Как сделать редирект с домена в РФ

Нужно, чтобы

домен.рф
domain.ru

перенаправлялись на: domain.ru/doc/

плюс желательно "doc" скрыть.

Sham
16-01-2011, 14:31
не забудьте, что кириллические домены шлются в punycode (http://ru.wikipedia.org/wiki/Punycode) (ссылка на конвертер внизу есть).




© OSzone.net 2001-2012