`
lz1130
  • 浏览: 408424 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

nginx rewrite for yii framework

阅读更多
首先说明,这个rewrite规则可能纯属个案,是根据程序员需要写的。

Yii How to hide index.php on nginx

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

Second, we need the following rewrite rule to hide index.php:
location /yiiGuestbook {
    if (!-e $request_filename){
        rewrite (.*) /yiiGuestbook/index.php/$1;
    }
}


上面的配置,定义了一个PATH_INFO $fastcgi_script_name;把对非文件的请求转到/yiiGuestbook/index.php

用上面的解决办法并不符合我们程序员的需要。我们需要的是对http://127.0.0.1/index.php/test/test这样的请求,PATH_INFO等于/test/test,并且把/test/test转到index.php。但是nginx的PATH_INFO变量默认是没有的,只能自己定义。于是有了下面的解决办法。

#add for yiiframework
        if (!-e $request_filename){
                   rewrite (.*) /index.php break;
        }
#end for yiiframework

        location ~ .*\.php?$
        {
                  #fastcgi_pass  unix:/tmp/php-cgi.sock;
                  include fcgi.conf;   
                  fastcgi_pass  127.0.0.1:10080;
                  fastcgi_index index.php;
                  set $path_info "";
                  if ($request_uri ~ "^(.+?\.php)(/.+)$") {
                        set $path_info $2;
                  }
                  if ($request_uri ~ "^(.+?\.php)(.*)(\?.*)$") {
                        set $path_info $2;
                  }
                  fastcgi_param PATH_INFO $path_info;
        }


为了代码美观,最后决定用直接用http://127.0.0.1/test/test这样的请求,实现起来也非常简单,应为PATH_INFO直接就等于$request_uri。有"?"传值时特殊考虑。配置如下。

#add for yiiframework
        if (!-e $request_filename){
                   rewrite (.*) /index.php break;
        }
#end for yiiframework

        location ~ .*\.php?$
        {
                  #fastcgi_pass  unix:/tmp/php-cgi.sock; 
                  include fcgi.conf;      
                  fastcgi_pass  127.0.0.1:10080;
                  fastcgi_index index.php;

                  set $path_info $request_uri;

                  if ($request_uri ~ "^(.*)(\?.*)$") {
                        set $path_info $1;
                  }
                  fastcgi_param PATH_INFO $path_info;
        }
分享到:
评论

相关推荐

    nginx rewrite常用示例

    ### Nginx Rewrite 常用示例解析 #### 一、从非-www 版本自动重定向到 www 版本 **应用场景:** 当用户访问 `abc.com`(无 www 的版本)时,需要自动重定向到 `http://www.abc.com`。 **配置示例:** ```nginx ...

    Nginx的Rewrite规则与实例

    ### Nginx的Rewrite规则与实例:深入解析与应用 在现代Web服务器管理与运维领域,Nginx因其高效、稳定以及丰富的功能而备受推崇。其中,Rewrite模块是Nginx的一项重要特性,它允许管理员对HTTP请求进行重写、重定向...

    Nginx关于Rewrite执行顺序详解.docx

    在Nginx中,Rewrite模块是实现URL重写的重要工具,它允许我们根据预定义的规则对请求的URL进行转换,从而实现动态URL到静态URL的映射、隐藏真实路径、实现URL路由等目的。这篇文档将深入解析Nginx中Rewrite模块的...

    实例讲解nginx的rewrite规则

    ### 实例讲解Nginx的rewrite规则 #### 正则表达式匹配 在Nginx中,使用`rewrite`指令可以实现对URL的重写,其中涉及到正则表达式的匹配方式有以下几种: 1. **区分大小写的匹配**:使用`~`符号,例如:`rewrite ^/...

    nginx rewrite规则

    **Nginx Rewrite 规则详解** 在Web服务器领域,Nginx以其高效、轻量级的特性,被广泛用于处理静态内容和反向代理。其中,`rewrite`规则是Nginx的一项重要功能,它允许我们重写URL,实现动态路由、URL美化等目的。与...

    Nginx中rewrite实现二级域名、三级域名、泛域名、路径的重写[文].pdf

    Nginx 中 rewrite 实现二级域名、三级域名、泛域名、路径的重写 Nginx 中的 rewrite 模块是实现 URL 重写和.redirect 的强大工具。下面我们将详细介绍 Nginx 中如何使用 rewrite 实现二级域名、三级域名、泛域名、...

    nginx Rewrite语法详解.zip

    nginx Rewrite语法详解 rewrite规则 常用的命令 if (条件) {} 设定条件,再进行重写 set #设置变量 return #返回状态码 break #跳出rewrite rewrite #重写 Nginx入门到实践-中间件服务、应用层负载均衡、应用层...

    nginx中带问号(?) 带参数的rewrite规则

    在Nginx服务器配置中,`rewrite`指令用于URL重写,这在创建动态到静态页面的重定向、实现URL路由、或者根据特定条件改变URL结构时非常有用。当URL中包含问号(`?`)以及参数时,处理起来可能会有些复杂,因为问号及其...

    nginx-rewrite彻底解决discz X3多入口问题

    #nginx-rewrite彻底解决discz X3多入口问题 #本规则仅适用于nginx。请大家举一反三,根据自己的实际应用情况进行适当调整。有点繁琐,但是有用。 #本文由丽江热线CTO shwan原创,转载请保留本行信息。应用效果见:...

    详解nginx rewrite和根据url参数location

    首先查看下nginx是否支持rewrite: ./nginx -V 不支持说明安装nginx时候缺少pcre,需要重新安装nginx: #安装pcre wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.34.tar.gz tar -zxvf pcre-...

    nginx设置rewrite规则

    下面将详细介绍如何在LNMP环境中配置Nginx的rewrite规则。 首先,了解rewrite规则的基本概念。Nginx的rewrite模块允许我们根据特定的条件重写请求的URI,这在实现URL路由、隐藏真实路径、SEO优化等方面非常有用。它...

    Nginx Rewrite模块应用的几种场景

    **Nginx Rewrite模块应用详解** Nginx的Rewrite模块是其强大的URL重写工具,它可以基于HTTP请求的URL动态改变请求的目标,实现各种复杂的路由控制和URL美化功能。以下我们将详细介绍Nginx Rewrite模块在不同场景下...

    nginx rewrite规则怎么配置-.docx

    **Nginx Rewrite规则配置详解** 在Web服务器优化和URL管理中,Nginx的Rewrite规则扮演着重要角色。它允许我们根据特定条件重写请求的URL,从而实现动态URL到静态URL的转换、URL规范化、路径重定向等。Nginx的...

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

    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...

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

    导读:nginx rewrite重写规则与防盗链配置方法,rewrite规则格式中flag标记的几种形式,盗链时返回403错误,允许的域名直接跟在第二行的域名后面。 nginx rewrite重写规则与防盗链配置方法如下所示: nginx rewite...

Global site tag (gtag.js) - Google Analytics