apache多个重写条件到nginx

问题描述:

任何人都可以帮助我吗?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; 
    } 
    } 
} 

我最终使用:

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; 
} 

尝试改变~* !!~*,并结合过去的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