NGINX配置正则表达式问题

时间:2012-06-12 11:28:21

标签: regex configuration nginx

我有点迷失在这里。在我的nginx conf文件中,我想要一个规则说明:

if $request_uri does not contain following words (css|images|js) then rewrite all to /index.php

这是我得到的,但它不起作用:

if ($request_uri ~ !(images|css|js)) {
    rewrite $ /index.php;
}

我认为正则表达式不匹配?

编辑:这是解决方案

if ($request_uri !~* (images|css|js)) {
    rewrite $ /index.php;
}

1 个答案:

答案 0 :(得分:1)

  1. IfIsEvil又贵又贵。
  2. 改为使用正逻辑。
  3. 最好将所有静态内容放在目录中。

    -static 
     |--images
     |--css
     |--js
    
    
    server {
      server_name www.foo.com;
      root /your_nginx_root/;
    
      location / {
        index  index.php;
      }
    
      location /static {
        add_header Cache_control "public";
        expires max;
      }
    
      error_page 301 302 400 401 402 403 404 405      /index.php;
      error_page 406 408 409 410 411 412 413 414      /index.php;
      error_page 415 416 495 496 497 500 501 502      /index.php;
      error_page 503 504 507                          /index.php;
    }
    


    * 编辑: *试试这个

    if ($request_uri !~* (images|css|js)) {
        rewrite $ /index.php;
    }