DiliCMS框架Nginx rewrite伪静态配置

例子

 代码如下 复制代码

server {
    listen 80;
    root /path/to/dilicms/;
    index index.php;
    server_name www.111cn.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?;

时间: 2024-11-30 23:38:21

DiliCMS框架Nginx rewrite伪静态配置的相关文章

nginx rewrite 伪静态配置参数和使用例子_nginx

正则表达式匹配,其中: * ~ 为区分大小写匹配 * ~* 为不区分大小写匹配 * !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配,其中: * -f和!-f用来判断是否存在文件 * -d和!-d用来判断是否存在目录 * -e和!-e用来判断是否存在文件或目录 * -x和!-x用来判断文件是否可执行 flag标记有: * last 相当于Apache里的[L]标记,表示完成rewrite * break 终止匹配, 不再匹配后面的规则 * redirect 返回302临时重

nginx rewrite 伪静态配置参数详解

经过网上查阅和测试,发现Nginx的Rewrite规则和Apache的Rewite规则差别不是很大,几乎可以直接使用.比如在Apache中这样写规则  代码如下 复制代码 rewrite ^/([0-9]{5}).html$ /viewthread.php?tid=$1 last; 而在Nginx中写成这样写是无法启动的,解决的办法是加上两个双引号:  代码如下 复制代码 rewrite "^/([0-9]{5}).html$" /viewthread.php?tid=$1 last;

Nginx的伪静态配置中使用rewrite来实现自动补全的实例_nginx

nginx+php 使用的时候经常需要伪静态,一般大家都手动设置.那有没有办法让 nginx 自动补全路径呢? 这两天折腾很久,才实现了这样一个功能: 请求 /a/b/c 若文件不存在,查找 /a/b/index.php,/c 作为 PATH_INFO: 若文件不存在,查找 /a/index.php,/b/c 作为 PATH_INFO: 若文件不存在,查找 /index.php,/a/b/c 作为 PATH_INFO: 若文件不存在,返回 404. 虽然这种损耗性能的行为不适合部署,但在本机调试

nginx rewrite 伪静态地址自动补全的方法实现

nginx+php 使用的时候经常需要伪静态,一般大家都手动设置.那有没有办法让 nginx 自动补全路径呢? 这两天折腾很久,才实现了这样一个功能:请求 /a/b/c若文件不存在,查找 /a/b/index.php,/c 作为 PATH_INFO:若文件不存在,查找 /a/index.php,/b/c 作为 PATH_INFO:若文件不存在,查找 /index.php,/a/b/c 作为 PATH_INFO:若文件不存在,返回 404. 虽然这种损耗性能的行为不适合部署,但在本机调试的时候还是

nginx rewrite重写规则配置教程详细介绍

rewrite可以出现的地方有4个:NGX_HTTP_SRV_CONF,NGX_HTTP_SIF_CONF,NGX_HTTP_LOC_CONF,NGX_HTTP_LIF_CONF.分别对应着: NGX_HTTP_SRV_CONF:配置文件中的server域中的任何地方: NGX_HTTP_SIF_CONF:配置文件中server域中的if配置中: NGX_HTTP_LOC_CONF:配置文件中的location域中的任何地方: NGX_HTTP_LIF_CONF:配置文件中的location域中

nginx rewrite重写规则与防盗链配置方法教程详解_nginx

导读:nginx rewrite重写规则与防盗链配置方法,rewrite规则格式中flag标记的几种形式,盗链时返回403错误,允许的域名直接跟在第二行的域名后面. nginx rewrite重写规则与防盗链配置方法如下所示: nginx rewite 规则,官方文档:http://wiki.nginx.org/NginxHttpRewriteModule nginx rewrite规则格式:rewrite regex replacement flag flag标记有四种格式: last – 相

Nginx配置PHP的Yii与CakePHP框架的rewrite规则示例_nginx

Yii的Nginx rewrite 如下为nginx yii的重写 server { set $host_path "/data/site/www.jb51.net"; access_log /data/logs/nginx/www.jb51.net_access.log main; server_name jb51.net www.jb51.net; root $host_path/htdocs; set $yii_bootstrap "index.php"; #

PHPwind 9升级后 nginx apache iis 伪静态配置

  PHPwind 9 正式版是一个非常不错的论坛系统,这里就不多宣传了.主要问题是很多之前的用户升级来发现变化很多,之前的伪静态也不能使用了,这里交给大家一个快速设计PW9的伪静态和PHPwind 8.7升级来后,如何使用继续使用以前的伪静态的方法. 官方只提供了新版的伪静态的设计方法,如图: 搜索伪静态,按照要求开启即可, Apache Web Server 配置 在www目录下自带了.htaccess文件,开启了rewrite后可直接使用,更改了格式后也无需更改这个文件内容. IIS配置

nginx 伪静态配置方法

nginx里使用伪静态是直接在nginx.conf 中写规则的,并不需要像apache要开启写模块(mod_rewrite)才能进行伪静态 nginx只需要打开nginx.conf配置文件,在server里面写需要的规则即可  代码如下 复制代码 server { listen       80; server_name  bbs.o135.cn; index index.html index.htm index.php; root  /home/www/bbs; error_page  404