一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

DiliCMS框架Nginx rewrite伪静态配置

时间:2014-03-24 编辑:简简单单 来源:一聚教程网


例子

 代码如下 复制代码

server {
    listen 80;
    root /path/to/dilicms/;
    index index.php;
    server_name www.111com.net;

    location ~ ^(/(application|system|services|shared|admin/backup|admin/config|admin/controllers|admin/core|amdin/errors|admin/hooks|admin/language))/ {
        deny all;
    }

    location / {

        if ($request_uri ~* index/?$)
        {
            rewrite ^/(.*)/index/?$ /$1 permanent;
        }

        if (!-d $request_filename)
        {
            rewrite ^/(.+)/$ /$1 permanent;
        }

        set $admin '';

        if ($request_uri ~* ^/admin/) {
            set $admin A;
        }

        if ($request_uri ~* ^/install/) {
            set $admin B;
        }

        if (!-e $request_filename) {
            set $admin "X${admin}";
        }

        if ($admin = XA) {
            rewrite ^/admin/(.*)$ /admin/index.php?/$1 last;
            break;
        }

        if ($admin = XB) {
            rewrite ^/install/public/(.*)$ /install/public/index.php?/$1 last;
        }

        if ($admin = X) {
            rewrite ^/(.*)$ /index.php?/$1 last;
            break;
        }

    }


    location ~ .php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /path/to/dilicms$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /.ht {
        deny all;
    }
}

下面再整理一些关于nginx Rewrite的例子


习惯于只在Apache下使用.htaccess文件配置所有信息,通常会将下面规则

 代码如下 复制代码

    RewriteCond  %{HTTP_HOST}  example.org
    RewriteRule  (.*)          http://www.example.org$1

翻译成这样:

 代码如下 复制代码

    server {
        listen       80;
        server_name  www.example.org  example.org;
        if ($http_host = example.org) {
            rewrite  (.*)  http://www.example.org$1;
        }
        ...
    }

这种做法是错的,复杂而且低效。正确的方式是为example.org定义一个单独的服务器:

 代码如下 复制代码

    server {
        listen       80;
        server_name  example.org;
        return       301 http://www.example.org$request_uri;
    }

    server {
        listen       80;
        server_name  www.example.org;
        ...
    }

    在0.9.1版本(含)以前,可以这样实现重定向:

 代码如下 复制代码

            rewrite      ^ http://www.example.org$request_uri?;

再举一个例子,处理一个和刚才相反的逻辑:既不是来自example.com,又不是来自www.example.com:

 代码如下 复制代码

    RewriteCond  %{HTTP_HOST}  !example.com
    RewriteCond  %{HTTP_HOST}  !www.example.com
    RewriteRule  (.*)          http://www.example.com$1

应该按下面这样分开定义example.com、www.example.com和其他站点:

 代码如下 复制代码

    server {
        listen       80;
        server_name  example.com www.example.com;
        ...
    }

    server {
        listen       80 default_server;
        server_name  _;
        return       301 http://example.com$request_uri;
    }

    在0.9.1版本(含)以前,可以这样实现重定向:

 代码如下 复制代码

            rewrite      ^ http://example.com$request_uri?;

热门栏目