RewriteCond + location

Igor Sysoev is at rambler-co.ru
Fri Nov 14 12:02:28 MSK 2008


On Wed, Nov 12, 2008 at 03:14:04PM +0300, dron wrote:

> неудобно уже задавать вопросы по rewrite, но самому осилить не
> получается.
> 
> Есть:
> RewriteCond %{REQUEST_URI} !^/(admin|news|index.php)/(.*)$
> RewriteCond %{REQUEST_URI} !^/admin$
> RewriteCond %{REQUEST_URI} !^/site$
> RewriteRule     ^([0-9a-z/_]+)$      /index.php?application=content&path=$1 [L,NC]
> 
> 
> пробовал:
> location ~^/admin/(news|objects|faq|index)/?(.*)/?${
>         rewrite ^/([0-9a-z/_]+)$ /?application=content&path=$1 last;
> }
> 
> location ~^/site${
>         rewrite ^/([0-9a-z/_]+)$ /?application=content&path=$1 last;
> }
> 
> location ~^/admin${
>         rewrite ^/([0-9a-z/_]+)$ /?application=content&path=$1 last;
> }
> 
> с кавычками, с * тоже пробовал.
> Но это правило вообще не отрабатывает, как-будто и нет его...
> 
> если так:
> location / {
>  rewrite ^/([0-9a-z/_]+)$ /?application=content&path=$1 last;
> }
> 
> то отрабатывает везде, даже там, где не требуется, например в /admin/
> и остальных исключениях...

Во-первых, "!^/admin$" и прочие "!..." - это отрицания.

Во-вторых,

-    location ~^/admin/(news|objects|faq|index)/?(.*)/?${
+    location ~ ^/admin/(news|objects|faq|index)/?(.*)/?${

В-третих, регулярные выражения в 

   RewriteCond %{REQUEST_URI} !^/(admin|news|index.php)/(.*)$
и
   location ~^/admin/(news|objects|faq|index)/?(.*)/?${

разные.

Как-то так, в зависимости от того, что делается в остальныом конфиге:

     location / {
         rewrite ^/([0-9a-z/_]+)$ /index.php?application=content&path=$1 last;
     }

     location = /site {
         ...
     }

     location = /admin {
         ...
     }

     location ~ \.php$ {
         ...
     }

     location ~ ^/(admin|news|index\.php)/(.*)$ {
         ...
     }


-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list