Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Администрирование Web серверов и Web служб > Как сделать так, чтобы в Rewrite Rule работали...


Автор: Borland_Delphi_6 13.5.2005, 13:22
САБЖ. Например код:

RewriteEngine on
Options FollowSymLinks -Indexes
RewriteRule ^([a-z]+)-?\.jpg$ $1.php [NC,L,QSA]
RewriteRule ^([0-9a-z]+)-([0-9a-z]+)-([0-9a-z_]*)-?(.*)$ $1-$4?$2=$3 [NC,QSA]

Понимает цифры 0-9 и буквы a-z. А как заставить его работать со спец. символами и русскими буквами?

Автор: Borland_Delphi_6 15.5.2005, 15:24
Народ, неужели никто не знает? Должен же быть способ! Или я объяснил глючно? smile

Автор: Borland_Delphi_6 16.5.2005, 13:11
Объясняю подробно, как могу...

Есть правило:
ewriteRule ^([0-9a-z]+)-([0-9a-z]+)-([0-9a-z_]*)-?(.*)$ $1-$4?$2=$3 QSA]

Его нужно превратить в:
RewriteRule ^([0-9a-z]+)-([0-9a-z]+)-([0-9a-z_ !А ТАКЖЕ СИМВОЛ "%"!]*)-?(.*)$ $1-$4?$2=$3 [NE,QSA]

Вот как это в регулярках записать? И еще: как сделать так, чтобы заглавные и строчные буквы различались? Т.е. в url можно было бы писать и то и то, но по GET они бы передавались в нужном регистре...

Автор: Mal Hack 16.5.2005, 14:01
\ - обычно эскейпит спецсимволы. \. - точка.
Для % возможно надо написать %%.

Автор: Borland_Delphi_6 16.5.2005, 14:03
Через слеш пробовал. А вот %% еще нет. Пойду smile

Автор: Borland_Delphi_6 16.5.2005, 16:45
Нифига smile Неужели не получится подружить RewriteEngine со спец. символами? smile smile smile У меня уже есть корявое решение (на пхп), но хочется нормального...

Автор: Mal Hack 16.5.2005, 17:15
Borland_Delphi_6
а как вообще у тебя там % оказался?
По логикет с % гначинается 16 ричный код символа не на ISO-en кодировке...

Автор: Borland_Delphi_6 17.5.2005, 12:31
URLEncode возвращает коды символов, и начинаются они с %. %20 - пробел и т.д....

Автор: Mal Hack 17.5.2005, 13:06
Borland_Delphi_6
я тебя не понимаю малость. % означает что дальше идет код символа. % в имени файла быть не может. так зачем ьтебе их в реврайте как-то обрабатывать, если потом в скрипте надо декодировать?

Автор: Borland_Delphi_6 17.5.2005, 14:12
Правильно, код символа. Мне нужно передать русский текст в GET'e, а потом сделать urlDEcode и вывести оригинал.

Автор: Mal Hack 17.5.2005, 14:22
А при чем тут реврай-то? smile
Пиши просто в паттерне - любой символ smile

Автор: Borland_Delphi_6 17.5.2005, 17:01
Так. Еще раз. Сейчас URL работает такой:
test.jpg-param-AnyEnglishLetterAndNumber

А вот test.jpg-param-Any%20English%20Letter%20And%20Number - нет! Rewrite Rule под это не настроено! Вот как изменить его для данной задачи? (оригинал выше).

Автор: Mal Hack 17.5.2005, 17:07
RewriteRule ^([0-9a-z]+)-([0-9a-z]+)-(.+?)-?(.*)$ $1-$4?$2=$3 [NE,QSA]

Автор: Borland_Delphi_6 18.5.2005, 14:19
Internal Server Error

Автор: Mal Hack 18.5.2005, 14:29
RewriteRule ^([0-9a-z]+)-([0-9a-z]+)-(.+?)-(.*)$ $1-$4?$2=$3 [NE,QSA]

Автор: Borland_Delphi_6 19.5.2005, 17:08
Internal Server Error
Эх, спасибо конечно, но видимо придется это реализовывать средствами PHP... Вот код, если интересно.

Код

function encode($str)
{
$out = base64_encode($str);
$out = str_replace("+", "_43_", $out);
$out = str_replace("/", "_47_", $out);
return $out;
}

function decode($str)
{
$stage1 = str_replace("_43_", "+", $str);
$stage2 = str_replace("_47_", "/", $stage1);
$out = base64_decode($stage2);
return $out;
}

$string = encode("абвгдеёжзйиклмнопрстуфхцчшщъыьэюя!#$%&'()*+,-./:;<=>?@^`_{|}~ ?");
echo $string;

Автор: Mal Hack 19.5.2005, 19:02
Попробуй:
RewriteRule ^([0-9a-z]+)-([0-9a-z]+)-(.+?)-(.+)$ $1-$4?$2=$3 [NE,QSA]

Автор: Borland_Delphi_6 19.5.2005, 20:35
То же самое

Автор: Mal Hack 19.5.2005, 20:44
Код
Options +FollowSymlinks -MultiViews 
RewriteEngine On
RewriteRule ^([0-9a-z]+)-([0-9a-z]+)-(.+)-(.+)$ $1-$4?$2=$3 

Код рабочий. При http://scripts.localhost/rewrite/sdf1-sdf2-sdf3-sdf4 редирект был на: http://scripts.localhost/rewrite/sdf1-sdf4?sdf2=sdf3

Автор: Borland_Delphi_6 20.5.2005, 14:57
Mal Hack
Может быть, но в любом случае должно быть
http://scripts.localhost/rewrite/sdf1-sdf2%20-sdf3%20-sdf4%20 Хотя у меня http 500.

Автор: Mal Hack 20.5.2005, 17:37
Borland_Delphi_6
странно. У меня лишь 404 вылезла... Не более..
Попробуй вот так:
RewriteRule ^(.+)-(.+)-(.+)-(.+)$ $1-$4?$2=$3

Автор: Borland_Delphi_6 20.5.2005, 20:32
Будет возможность, проверю. Пока у меня другой вопрос: как заставить его различать заглавные и строчные буквы, а то в GET'е всё строчным передаётся. Надеюсь модераторы не обидятся smile

Автор: Mal Hack 20.5.2005, 20:39
В моем последнем рэгэ пофиг какие буквы. А вообще:
[a-zA-Z]

Автор: Borland_Delphi_6 21.5.2005, 14:47
Так если бы... Я тк
Добавлено @ 14:50
Так если бы... Я так уже пробовал. Всё равно Get'ом передаёт только строчные буквы. Флаг NC не стоит.

Автор: Mal Hack 21.5.2005, 14:58
Цитата(Borland_Delphi_6 @ 21.5.2005, 15:47)
Всё равно Get'ом передаёт только строчные буквы.

Значит Апаче так настроен. Вроде там былда директива отвечающая за подобгные преобразования.

Borland_Delphi_6
у меня рэг работеат. как тебе нужно. Проверял.

Автор: Borland_Delphi_6 30.5.2005, 12:48
Хм, действительно, на сервере все заработало! Mal Hack, спасибо! Вот что получилось:
http://code.pp.ru/plug-r-getinformer

Автор: Mal Hack 30.5.2005, 16:26
Ну вот и замечательно smile
Будут вопросы, спрашивай еще smile
http://vingrad.ru/WEB-SERVER-002835 - вот еще в качестве материальчика smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)