最常见的: 静态地址重定向到带参数的动态地址

rewrite "^(.*)/service/(.*)\.html$" $1/service.php?sid=$2 permanent;

反过来: 带参数的动态地址重定向到静态地址

if ($query_string ~* id=(.*)) { 
set $id $1; 
rewrite "^(.*)/article.asp$" $1/article/$id.htm last; 
}

泛域名解析

view plaincopy to clipboardprint?
server_name www.w3cgroup.com *.w3cgroup.com; 
server_name_in_redirect off; 
#设置默认root 
set $rootdir /usr/local/nginx/html/w3cgroup/;

#匹配三级或三级以上的域名

if ($host ~* ^(.+)\.([^\.]+)\.([^\.]+)\.([^\.]+)$)  {

}
#匹配三级域名 
if ($host ~* ^([^\.]+)\.([^\.]+)\.([^\.]+)\.([^\.]+)$) { 
#三级域名中有访问指定的目录则重定向到相应的二级域名下 
rewrite "^.+upload/?(.*)$" http://upload.w3cgroup.com/$1 permanent; 
rewrite "^.+ijc/?(.*)$" http://ijc.w3cgroup.com/$1 permanent; 
break; 

#匹配二级域名 
if ($host ~* ^([^\.]+)\.([^\.]+)\.([^\.]+)$) { 
set $rs1 $1; 

#设置www时root 
if ($rs1 ~* ^www$) { 
set $rootdir /usr/local/nginx/html/platform_ig/; 
#二级域名中有访问指定的目录则重定向到相应的二级域名下,注意,这里要使用last 
rewrite "^.+upload/?(.*)$" upload/$1 last; 
rewrite "^.+ijc/?(.*)$" ijc/$1 last; 
break; 

#设置非www二级域名时root 
if ($rs1 !~* ^www$) { 
set $rootdir /usr/local/nginx/html/w3cgroup/$rs1; 
#二级域名中有访问指定的目录则重定向到相应的二级域名下 
rewrite "^.+upload/?(.*)$" http://upload.w3cgroup.com/$1 permanent; 
rewrite "^.+ijc/?(.*)$" http://ijc.w3cgroup.com/$1 permanent; 
break; 

#应用root 
root $rootdir; 
index index.php index.html; 
error_page 404 http://$host/;

注意:if () {} 之间需要空格,否则Nginx.conf会报unknow directive 错误!

参考:

Nginx Rewrite Flags 
* last 相当于Apache里的[L]标记,表示完成rewrite
* break 终止匹配, 不再匹配后面的规则
* redirect 返回302临时重定向
* permanent 返回301永久重定向

Nginx正则表达式匹配 
* ~ 为区分大小写匹配
* ~* 为不区分大小写匹配
* !~和!~*分别为区分大小写不匹配及不区分大小写不匹配

Nginx文件及目录匹配 
* -f和!-f用来判断是否存在文件
* -d和!-d用来判断是否存在目录
* -e和!-e用来判断是否存在文件或目录
* -x和!-x用来判断文件是否可执行

Nginx全局变量 
view plaincopy to clipboardprint?
$args 
$content_length 
$content_type 
$document_root 
$document_uri 
$host 
$http_user_agent 
$http_cookie 
$limit_rate 
$request_body_file 
$request_method 
$remote_addr 
$remote_port 
$remote_user 
$request_filename 
$request_uri 
$query_string 
$scheme 
$server_protocol 
$server_addr 
$server_name 
$server_port 
$uri

Nginx中rewrite实现二级域名、三级域名、泛域名、路径的重写的更多相关文章

  1. nginx中rewrite flag

    rewrite  正则表达式  新URI  [flag]; [flag] 选项用于调控重写的行为,它的取值可能是: last:重写完成后,会停止继续处理当前区块所有属于ngx_http_rewrite ...

  2. Let's Encrypt泛域名使用和Nginx配置拆分

    上一期写了 使用Let's Encrypt实现网站https化 ,随着二级域名的增多,每个二级域名需要一张 SSL 证书,这可太不优雅了,泛域名表示我可以更优雅. 作者:IT王小二 博客:https: ...

  3. 泛域名Wildcard Domain

    泛域名Wildcard Domain 泛域名Wildcard Domain是一种特殊的域名形式.它使用星号作为域名的一级.例如,*.baidu.com就是使用星号作为域名的二级部分.在域名解析中,一个 ...

  4. Let's Encrypt免费泛域名证书申请

    一. 下载acme.sh,以下四条命令任选一条即可 curl https://get.acme.sh | shwget -O - https://get.acme.sh | sh curl https ...

  5. 设置泛域名和设置IIS下面不同网站通过不同域名公用80端口的操作指引

    原文链接: http://www.lookdaima.com/WebForms/WebPages/Blanks/Pm/Docs/DocItemDetail.aspx?id=4be204ca-249b- ...

  6. 新开源HTML5单文件网页版ACME客户端,可在线申请Let's Encrypt、ZeroSSL免费HTTPS多域名通配符泛域名SSL/TLS证书(RSA/ECC/ECDSA)

    目录 开源项目的起源 项目地址 使用方法 第一步:选择Let's Encrypt.ZeroSSL或其他证书颁发机构 第二步:证书配置,填写域名 第三步:完成域名所有权的验证 第四步:下载保存证书PEM ...

  7. Nginx Rewrite 实现匹配泛域名规则

    Nginx 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru ...

  8. 配置nginx服务器 —— Nginx添加多个二级子域名

    1.安装nginx centos/linux下的安装Nginx 2.安装好后进入Nginx目录中 在conf目录下建立一个vhost(ps:名字自己设定)文件夹 其中的$NGINXHOME为你的ngi ...

  9. php中cookie实现二级域名可访问操作的方法

    本文实例讲述了php中cookie实现二级域名可访问操作的方法.分享给大家供大家参考.具体方法如下: cookie在一些应用中很常用,假设我有一个多级域名要求可以同时访问主域名绑定的cookie,下面 ...

随机推荐

  1. Javascript模块化编程(一):模块的写法(转)

    随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂. 网页越来越像桌面程序,需要一个团队分工协作.进度管理.单元测试等等......开发者 ...

  2. JSONObject put,accumulate,element的区别

    public Object put (Object key, Object value) 将value映射到key下.如果此JSONObject对象之前存在一个value在这个key下,当前的valu ...

  3. Extjs 3.4 同值合并

    摘自:http://www.cnblogs.com/kunpengit/archive/2012/11/13/2768239.html/** * grid gridPanel 需要合并的表格 * ro ...

  4. 为什么C#中要设计IntPtr?

    示例代码: IntPtr vertex = someObj.Get().Lock(0, someObj.Get().GetSizeInBytes(), HardwareBuffer.LOCKOPTIO ...

  5. iphone 群发短信 闪退 彻底解决

    用iphone5群发短信,经常闪退,一般人多的时候,最容易出现 试了很多办法,ifile改sms.db等权限等 没有根本解决 一次操作中,发现群发时,每个号码都会显示菊花,貌似在检测什么 突然意识到, ...

  6. jQuery晦涩的底层工具方法们

    这里整理的是jQuery源码中一些比较晦涩难懂的.内部的.最底层的工具方法,它们多为jQuery的上层api方法服务,目前包括: jQuery.access jQuery.access: functi ...

  7. EditText光标位置

    1.xml中设置 gravity="top"  加入edittext框的高度不止一行时,该属性可是光标定位在第一行,不设置的话光标是默认在框的中间 2.etEdit.setSele ...

  8. PHP中include()与require()

    引用文件的方法有两种:require 及 include. require 的使用方法如 require("file.php"); .这个函数通常放在 PHP 程序的最前面,PHP ...

  9. android 获取设备拔插状态广播事件易漏掉的一行属性!

    我们都知道设备拔插的状态获取需要一个权限   <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILES ...

  10. 关于eclipse删除servers之后,不能新建其所对应版本的Servers

    无法从以下方式,添加Tomcat服务器.  其中ServerName是被置为灰色的,无法编辑. 如何解决 1.  关闭Eclipse 2.  打开WorkSpace所在的位置.    {workspa ...