Nginx支持二级目录

下面是一个server配置实例,支持/和/wordpress/俩个独立的网站。


server {
    listen       80 default_server;
    server_name   liungkejin.wang;

    # Default root and index.
    root   /var/www/monbook;
    index  index.php;

    location / {
        root   /var/www/monbook;
        index  index.php;

        if (!-e $request_filename) {
            rewrite ^/(.*)  /index.php last;
        }
    }

    location /wordpress/ {
        root   /var/www;
        index  index.php;

        # rewrite ^/wordpress/(.*)$ /wordpress/$1 break;

        location ~ \.php {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}


主要有两点需要关注:

  1. location代表匹配规则:匹配分两种:前缀式、正则式。按最长匹配原则,先匹配前缀式。然后,按定义的顺序匹配正则式。location可以嵌套。
  2. rewrite规则匹配到之后,会重新location匹配,不会超过10次。break flag,则表示不再location匹配;last flag,不再实行当前的序列。

也很好理解:首先,根据请求的URI匹配一个location,当location内定义的rewrite改变了uri,则需要重新匹配。