.htaccess到nginx.conf重写规则

时间:2011-12-23 10:28:00

标签: apache .htaccess nginx

我从.htaccess切换到nginx.conf我无法为nginx翻译这行:

RewriteBase /
RewriteCond $1 !^(index\.php|assets|uploads|fav.ico)
RewriteRule ^(.*)$ index.php/$1 [L]

我试过了:

if ($1 !~ "^(index\.php|assets|uploads|fav.ico)"){
       set $rule_0 1$rule_0;
}
if ($rule_0 = "1"){
       rewrite ^/(.*)$ /index.php/$1 last;
}

和此:

location /$ {
    index       index.php;
    # Removes index.php from URLs
    rewrite_log on;
    if (!-e $request_filename) {
      rewrite ^/(.*)$ /index.php/$1 last;
    }
}

但没有工作:(。我做错了什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

尝试翻译这段代码。

RewriteBase /
RewriteRule ^(index\.php|assets|uploads|fav.ico) - [L]
RewriteRule ^(.*)$ index.php/$1 [L]

你遇到的问题是因为apache首先在RewriteCond之前执行RewriteRule。你的nginx代码是按顺序运行的,所以当你读出它时,$ 1还没有设置。

我不知道nginx,但我认为这可能是你得到的,如果你翻译上述内容:

rewrite ^/(index\.php|assets|uploads|fav.ico) - last
rewrite ^/(.*)$ /index.php/$1 last;

或者

rewrite ^/(index\.php|assets|uploads|fav.ico).*$ $0 last
rewrite ^/(.*)$ /index.php/$1 last;