2012-09-24 3 views
1

Может ли кто-нибудь помочь мне с этим?apache несколько условий перезаписи для nginx

RewriteCond %{REQUEST_URI} !^\/index\.php$ 
RewriteCond %{REQUEST_URI} !^\/search\/.* 
RewriteCond %{REQUEST_URI} ^\/([^/]*)\.php$ 
RewriteRule (.*) http://www.mydomain.com/index.php?page=$1 

Мне нужно преобразовать это для Nginx

Я попытался это, но он не будет работать:

if ($request_uri ~* !^\/search\/.*) { 
    if ($request_uri ~* !^\/index\.php$) { 
    if ($request_uri ~* ^\/([^/]*)\.php$) { 
     rewrite (.*) http://www.mydomain.com/index.php?page=$1; 
    } 
    } 
} 

ответ

1

Я закончил с использованием:

if ($uri !~ "^/index.php$") { 
    set $rule_0 1$rule_0; 
} 
if ($uri !~ "^/search/.*") { 
    set $rule_0 2$rule_0; 
} 
if ($uri ~ "^/([^/]*).php$") { 
    set $rule_0 3$rule_0; 
} 
if ($rule_0 = "321") { 
    rewrite ^(.*) /index.php?page=$1 last; 
} 
0

Попробуйте изменить ~* ! к !~*, и объединить последние 2:

if ($request_uri !~* ^/search/.*) { 
    if ($request_uri !~* ^/index\.php$) { 
    rewrite ^/([^/]*)\.php$ http://www.mydomain.com/index.php?page=$1 redirect; 
    } 
} 

Или придерживаться правил, основанных на местоположении:

location ~ /index\.php$ { } 
location ~ /search/.* { } 
location/{ 
    rewrite ^/([^/]*)\.php$ http://www.mydomain.com/index.php?page=$1 redirect; 
} 
+0

Первый не будет работать, потому что Nginx не принимает вложенности. – Arwed

Смежные вопросы