Re: Проблема с RewriteCond можно ли использовать регулярки в условиях?

Sergey Shepelev temotor на gmail.com
Чт Окт 28 03:29:47 MSD 2010


2010/10/28 Halfi <nginx-forum at nginx.us>:
> Sergey Shepelev Пишет:
> -------------------------------------------------------
>> http://sysoev.ru/nginx/docs/http/ngx_http_rewrite_module.html#if
>>
>> > сравнение переменной со строкой с
> помощью операторов "=" и "!=";
>>
>> И не должна тут работать регулярка.
>>
>> Вообще оператор равенства
>> с регекспами хоть где-то
>> используется?
>
> Сами бы повнимательнее мануал
> прочитали, следующий пункт, идущий за
> тем, который вы мне процитировали
> гласит о следующем:
> проверка переменной с помощью
> регулярного выражения без учёта
> регистра символов — "~*" и с учётом — "~".

Именно поэтому я и дал эту ссылку. :) Хорошо, что вы нашли правильный
оператор. Плохо, что с таким тоном.

> В регулярных выражениях можно
> использовать выделения, которые затем
> доступны в виде переменных $1 — $9. Также
> можно использовать отрицательные
> операторы "!~" и "!~*". Если в регулярном
> выражении встречаются символы "}" или ";",
> то всё выражение нужно заключить в
> одинарные или двойные кавычки.
>
>
> У меня получился такой вариант, но
> видимо я не допонимаю в условии:
>
> [code]
> if ($http_host ~ ^/(([-_a-zA-Z0-9/]+)([-_a-zA-Z0-9]+))$) {
>    rewrite  ^(.*)$  $1/ permanent;
> }
> [/code]
> Не работает, перепробовал много
> вариантов, в кавычках, без них.. В htaccess
> все работает ровно..
>

Ваш регексп не может быть с пользой применён к $http_host. Представьте
какие варианты строк могут быть в этой переменной и сформулируйте
(писать в рассылку не обязательно) что нужно из этих вариантов
вычленить.
pcretest или миллион других утилит для отладки регекспов в помощь.


Подробная информация о списке рассылки nginx-ru