ginx中rewrite实现二级域名、三级域名、泛域名、路径的重写

合集下载

wordpress nginx多站点rewrite(重写)规则

wordpress nginx多站点rewrite(重写)规则

wordpress nginx多站点rewrite(重写)规则wordpress多站点模式可以被应用在多种方式上。

其中最常用的是在"子目录"模式或者"二级域名"模式上。

Nginx提供了两种特殊的指令:"x-accel-redirect"和"map",使用这两个指令可以使得wordpress多站点的网络服务实现伪静态功能。

wordpress多站点模式可以被应用在多种方式上。

其中最常用的是在"子目录"模式或者"二级域名"模式上。

Nginx提供了两种特殊的指令:"x-accel-redirect"和"map",使用这两个指令可以使得wordpress多站点的网络服务实现伪静态功能。

wordpress多站点使用子目录重写规则配置中修改为自己的站点域名。

map$uri$blogname{~^(?P/[^/]+/)files/(.*)$blogpath;}map$blogname$blogid{default-999;#Ref:/extend/plugins/nginx-helper/#include/var/www/wordpress/wp-content/plugins/nginx-helper/map.conf;}server{server_;root/var/www//htdocs;index index.php;#多站点配置location~^(/[^/]+/)?files/(.+){try_files/wp-content/blogs.dir/$blogid/files/$2/wp-includes/ms-files.php?file=$2; access_log off;log_not_found off;expires max;}#avoid php readfile()location^~/blogs.dir{internal;alias/var/www//htdocs/wp-content/blogs.dir;access_log off;log_not_found off;expires max;}if(!-e$request_filename){rewrite/wp-admin$$scheme://$host$uri/permanent;rewrite^(/[^/]+)?(/wp-.*)$2last;rewrite^(/[^/]+)?(/.*\.php)$2last;}location/{try_files$uri$uri//index.php?$args;}location~\.php${try_files$uri=404;include fastcgi_params;fastcgi_pass php;#此处可以继续添加伪静态规则}wordpress多站二级域名重写规则配置中54ux修改为自己的站点域名。

nginx 重写规则

nginx 重写规则

nginx 重写规则Nginx是一个高性能的Web服务器和反向代理服务器,它支持大量并发连接,具有强大、灵活的配置选项,可以通过重写规则来定制化配置,实现功能扩展和优化。

重写规则是Nginx的一个核心功能,它可以让我们通过修改请求的URI或者args参数来实现URL的重定向、转换、隐藏、伪静态化等功能。

在Nginx中,重写规则主要通过location块和rewrite指令来实现。

下面我们将详细介绍Nginx中的重写规则。

一、location语法在Nginx配置文件中,我们可以通过location语法来设置URL的匹配规则和对应的配置信息。

location语法大致如下:location [路径] {配置信息}其中,路径可以是以下格式:- 精确匹配:/path,表示只匹配指定的URI。

- 前缀匹配:/prefix/,表示匹配指定目录下的所有URI。

- 正则匹配:~* \.php$,表示匹配符合正则表达式的URI。

配置信息可以包括:访问权限、重写规则、反向代理、静态文件服务等。

二、rewrite指令rewrite指令是Nginx中用来实现URL重写的关键指令,语法格式如下:rewrite regex replacement [flag];其中,regex表示所匹配的正则表达式,replacement表示替换后的URI,flag表示可选的标志位,常用的标志位包括:- last:执行完当前规则后,停止执行后续规则。

- break:执行完当前规则后,直接跳出location块。

- redirect:返回301或302状态码,对客户端进行重定向。

- permanent:返回301状态码,永久重定向。

下面是一些示例:1、将所有URI重定向到/index.htmllocation / {rewrite ^(.*)$ /index.html break;}2、将所有以.php结尾的URI重定向到对应的HTML页面3、将所有URI中的参数加上前缀prefix四、使用变量Nginx还支持使用变量来实现复杂的重写规则,常用的变量包括:- $uri:当前请求的URI。

nginx的rewrite用法

nginx的rewrite用法

nginx的rewrite用法Nginx的rewrite用法:Nginx是一个流行的开源Web服务器软件,它具有强大的功能和灵活的配置选项。

其中一个重要的功能是rewrite模块,它允许对请求的URL进行重写和重定向。

通过使用rewrite指令,可以修改请求的URL,将其重定向到另一个URL或者改变访问路径。

这对于维护网站的URL结构、处理URL转发或者实现重定向非常有用。

下面是一些常见的rewrite用法示例:1. 简单的重定向:rewrite ^/old-url$ /new-url permanent;这个示例将匹配旧的URL "/old-url",并将其重定向到新的URL "/new-url"。

使用permanent关键字可以确保客户端浏览器进行永久重定向。

2. 匹配并重新使用URL片段:rewrite ^/category/([a-zA-Z0-9_-]+)/([0-9]+)$ /index.php?category=$1&page=$2 last;当访问形如"/category/books/1"的URL时,将把URL重写为"/index.php?category=books&page=1"。

在此示例中,我们使用正则表达式来匹配URL的不同部分,并将其作为参数传递给重定向后的URL。

3. 阻止对特定目录或文件的访问:location /restricted/ {rewrite ^(.*)$ /forbidden.html last;}当访问以"/restricted/"开头的URL时,将通过重定向将访问者导向"/forbidden.html"页面。

这对于限制访问某些特定资源或目录非常有用。

4. 重写代理请求:location /proxy/ {rewrite ^/proxy/(.*)$ /$1 break;proxy_pass http://backend-server;}当访问以"/proxy/"开头的URL时,将使用重写规则将URL中的"/proxy/"部分删除,并将请求代理到后端服务器。

Nginx中rewrite实现二级域名、三级域名、泛域名、路径的重写

Nginx中rewrite实现二级域名、三级域名、泛域名、路径的重写

Nginx 中rewrite 实现二级域名、三级域名、泛域名、路径的重写最常见静态地址重定向到带参数的动态rewrite "(.*)/service/(.*)\.html$" $1/service.php?sid=$2 permanent; 反过来:带参数的动态地址重定向到静态地址if ($query_string ~* id=(.*)) {set $id $1;rewrite "A(.*)/article.asp$" $1/article/$id.htm last;} 泛域名解析view plaincopy to clipboardprint? server_name *; server_name_in_redirect off;#设置默认root set $rootdir /usr/local/nginx/html/w3cgroup/;#匹配三级或三级以上的域名if ($host ~* A(.+)\.([A\.]+)\.([A\.]+)\.([A\.]+)$) {}#匹配三级域名if ($host ~* A([A\.]+)\.([A\.]+)\.([A\.]+)\.([A\.]+)$) {#三级域名中有访问指定的目录则重定向到相应的二级域名rewrite "\+upload/?(.*)$" /$1 permanent;rewrite "A.+ijc/?(.*)$" /$1 permanent;break;}#匹配二级域名if ($host ~* A([A\.]+)\.([A\.]+)\.([A\.]+)$) {set $rs1 $1;}#设置www 时rootif ($rs1 ~* Awww$) {set $rootdir /usr/local/nginx/html/platform_ig/;#二级域名中有访问指定的目录则重定向到相应的二级域名下,注意,这里要使用lastrewrite "A.+upload/?(.*)$" upload/$1 last;rewrite "A.+ijc/?(.*)$" ijc/$1 last;break;}#设置非www 二级域名时rootif ($rs1 !~* Awww$) {set $rootdir /usr/local/nginx/html/w3cgroup/$rs1;#二级域名中有访问指定的目录则重定向到相应的二级域名下rewrite "\+upload/?(.*)$" /$1 permanent;rewrite "A.+ijc/?(.*)$" /$1permanent;break;}#应用rootroot $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)

Nginx重写功能(Rewrite)

Nginx重写功能(Rewrite)⽬录⼀、Nginx Rewrite概述⼆、Nginx Rewrite基本操作三、案例1、基于域名的跳转2、基于客户端 IP 访问跳转3、基于旧域名跳转到新域名后⾯加⽬录4、基于参数匹配(多余的)的跳转5、基于⽬录下所有 php 结尾的⽂件跳转6、基于最普通⼀条 url 请求的跳转⼀、Nginx Rewrite概述location是为了匹配访问的路径(URL)URL:就是⼀个具体路径/位置URI:指的是⼀个拥有相同类型/特性的对象集合Rewrite跳转场景URL看起来更规范、合理企业会将动态URL地址伪装成静态地址提供服务⽹址换新域名后,让旧的访问跳转到新的域名上服务端某些业务调整Rewrite跳转实现1.Nginx是通过ngx_http_rewrite_module模块⽀持url重写、⽀持if条件判断,但不⽀持else。

(Nginx哪些模块:核⼼/全局模块、HTTP模块、server模块、location if rewrite)2.另外该模块需要PCRE⽀持,应在编译Nginx时指定PCRE⽀持,默认已经安装。

3.根据相关变量重定向和选择不同的配置,从⼀个location跳转到另⼀个location,不过这样的循环最多可以执⾏10次,超过后Nginx将返回500错误。

4.同时,重写模块包含set指令,来创建新的变量并设其值,这在有些情景下⾮常有⽤的,如记录条件标识、传递参数到其他location、记录做了什么等等。

Rewrite实际场景Nginx跳转需求的实现⽅式使⽤rewrite进⾏匹配跳转使⽤if匹配全局变量后跳转使⽤location匹配再跳转(匹配的访问路径URL location可以匹配本地的重写以及跨服务器的跳转)rewrite放在server{}, if{},location{}段中(多个server模块 sever模块⾥包含location location包含if if⾥⾯包含rewrite)location只对域名后边的除去传递参数外的字符串起作⽤对域名或参数字符串使⽤if全局变量匹配使⽤proxy_pass反向代理Nginx正则表达式(什么是正则表达式:正则是作为精确匹配、过滤、筛选的⼀种执⾏规范)作⽤:1、精确匹配,减少遍历的消耗2、节省服务响应的资源消耗3、提⾼⽤户体验感4、提⾼服务器并发时、处理效率/性能Nginx使⽤正则的作⽤:Nginx作为运维⾓度前段接受、想⽤客户请求的直接对服务器所以需要考虑到Nginx的执⾏效率(精确匹配-类⽐)、性能(资源消耗)、抗压能⼒(⾼并发时处理能⼒)、⽤户体验感(⽤户访问群体)^ :匹配输⼊字符串的起始位置$ :匹配输⼊字符串的结束位置* :匹配前⾯的字符零次或多次。

nginx中rewrite方法

nginx中rewrite方法

nginx中rewrite方法一、引言在Web服务器和反向代理服务器中,Nginx拥有高性能和丰富的功能,成为了许多开发者和运维人员的首选。

本文将详细介绍Nginx中的rewrite方法,帮助大家更好地掌握这一强大的技术。

二、Nginx简介ginx是一款高性能的HTTP服务器,由俄罗斯程序员Igor Sysoev开发。

它具有高性能、稳定性、可扩展性等特点,支持多种编程语言编写,广泛应用于Web服务器和反向代理服务器等领域。

三、Nginx中的rewrite方法1.rewrite指令在Nginx配置文件中,可以使用rewrite指令来实现URL重写。

rewrite 指令的基本语法如下:```rewrite URL_pattern target_url;```其中,URL_pattern表示待重写的原始URL,target_url表示重写后的目标URL。

2.rewrite规则ginx支持两种rewrite规则:正则表达式和普通表达式。

正则表达式:使用`~`符号表示匹配,如:`~^/old_url/(.*)$ `普通表达式:使用`^`、`$`、`(.*)`等符号表示匹配,如:`^/old_url/(.*)$ `3.常用rewrite场景(1)重写URL:将长URL转换为短URL,提高网站美观度和用户体验。

(2)实现301重定向:当网站更换域名或目录时,使用301重定向将用户引导至新地址,提高搜索引擎友好度。

(3)限制请求频率:通过rewrite指令实现访问频率限制,防止恶意攻击和刷屏。

四、实战案例1.重写URL以下配置将长URL重写为短URL:```location /old_url/ {rewrite /old_url/(.*) /new_url/$1;}```2.实现301重定向以下配置实现网站目录跳转:```server {server_name old_;root /var/www/old_domain;rewrite ^/old_directory/(.*) http://new_/$1;redirect 301 /old_directory/ http://new_/;}```3.限制请求频率以下配置限制每分钟最多请求50次:```limit_req_zone $binary_remote_addr zone=mylimit:10mrate=50r/min;location / {if ($binary_remote_addr ~* "mylimit") {return 429 T oo Many Requests;}proxy_pass http://backend;}```五、总结与拓展本文详细介绍了Nginx中的rewrite方法,包括rewrite指令、rewrite规则和常用实战案例。

Nginx的rewrite模块详解

Nginx的rewrite模块详解

Nginx的rewrite模块详解rewrite模块即ngx_http_rewrite_module模块,主要功能是改写请求URI,是Nginx默认安装的模块。

rewrite模块会根据PCRE 正则匹配重写URI,然后发起内部跳转再匹配location,或者直接做30x重定向返回客户端。

指令执⾏顺序⾸先顺序执⾏server块中的rewrite模块指令,得到rewrite后的请求URI然后循环执⾏如下指令如果没有遇到中断循环标志,此循环最多执⾏10次,但是我们可以使⽤break指令来中断rewrite后的新⼀轮的循环(1). 依据rewrite后的请求URI,匹配定义的 location 块(2). 顺序执⾏匹配到的 location 中的rewrite模块指令指令breakContext: server, location, if停⽌执⾏ ngx_http_rewrite_module 的指令集,但是其他模块指令是不受影响的例⼦说明server {listen 8080;# 此处 break 会停⽌执⾏ server 块的 return 指令(return 指令属于rewrite模块)# 如果把它注释掉则所有请求进来都返回 okbreak;return 200 "ok";location = /testbreak {break;return 200 $request_uri;proxy_pass http://127.0.0.1:8080/other;}location / {return 200 $request_uri;}}# 发送请求如下# curl 127.0.0.1:8080/testbreak# /other# 可以看到返回 `/other` ⽽不是 `/testbreak`,说明 `proxy_pass` 指令还是被执⾏了# 也就是说其他模块的指令是不会被 break 中断执⾏的# (proxy_pass是ngx_http_proxy_module的指令)ifContext: server, location依据指定的条件决定是否执⾏ if 块语句中的内容if 中的⼏种判断条件1.⼀个变量名,如果变量 $variable 的值为空字符串或者字符串"0",则为false2.变量与⼀个字符串的⽐较相等为(=) 不相等为(!=) 注意此处不要把相等当做赋值语句啊3.变量与⼀个正则表达式的模式匹配操作符可以是(~ 区分⼤⼩写的正则匹配, ~不区分⼤⼩写的正则匹配, !!,前⾯两者的⾮)4.检测⽂件是否存在使⽤ -f(存在) 和 !-f(不存在)5.检测路径是否存在使⽤ -d(存在) 和 !-d(不存在) 后⾯判断可以是字符串也可是变量6.检测⽂件、路径、或者链接⽂件是否存在使⽤ -e(存在) 和 !-e(不存在) 后⾯判断可以是字符串也可是变量7.检测⽂件是否为可执⾏⽂件使⽤ -x(可执⾏) 和 !-x(不可执⾏) 后⾯判断可以是字符串也可是变量注意上⾯第1,2,3条被判断的必须是变量, 4, 5, 6, 7则可以是变量也可是字符串, -f/-d/-e/-x 基本⽤法和 bash 是⼀致的. set $variable "0";if ($variable) {# 不会执⾏,因为 "0" 为 falsebreak;}# 使⽤变量与正则表达式匹配没有问题if ( $http_host ~ "^star\.igrow\.cn$" ) {break;}# 字符串与正则表达式匹配报错if ( "star" ~ "^star\.igrow\.cn$" ) {break;}# 检查⽂件类的字符串与变量均可if ( !-f "/data.log" ) {break;}if ( !-f $filename ) {break;}returnContext: server, location, ifreturn code [text];return code URL;return URL;停⽌处理并将指定的code码返回给客户端。

nginx rewrite 用法

nginx rewrite 用法

nginx rewrite 用法nginx 的 rewrite 模块可以用来实现重写 URL,即修改客户端请求的 URL,让请求更有效,更可读。

下面介绍一下 nginx rewrite 的用法:1. 普通重写普通重写使用 rewrite 指令,语法为:```rewrite regex URL [flag];```其中,regex 是一个正则表达式,URL 是重写后的 URL,flag 是可选参数,用来修改重写行为。

例如,将 /foo 所有请求都重写到 /bar:```rewrite ^/foo(.*) /bar1;```在这里,^/foo(.*) 是正则表达式,表示匹配以 /foo 开头的字符串,(.*) 是一个捕获组,表示匹配的其余字串。

1 是替换串,1 表示第一个捕获组的内容,即 (.*) 匹配的内容。

2. 重定向重定向是指将浏览器的请求重定向到指定的 URL,常用于网站改版、更改域名等情况。

重定向使用 rewrite 指令和 return 指令,语法为:```# 301 Moved Permanentlyrewrite regex URL permanent;# 302 Foundrewrite regex URL redirect;return code URL;```其中,regex 和 URL 的含义同普通重写。

permanent 表示重定向为永久重定向,浏览器会更新其缓存和书签,redirect 表示重定向为临时重定向。

例如,将所有以 .example 访问的请求重定向到http://example:```server {listen 80;server_name .example;rewrite ^(.*) http://example1 permanent;}```3. 反向代理反向代理是指将客户端的请求转发到后端的 Web 服务器,常用于负载均衡、SSL 加速等情况。

反向代理使用 proxy_pass 指令,语法为:```location / {proxy_pass http://backend;}```其中,/ 是匹配的 URL 地址,http://backend 是后端服务器的地址。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ginx中rewrite实现二级域名、三级域名、泛域名、路径的重写
原本准备换Linux服务器,所以数据迁移暂时需要使用静态页面临时代替一下,之前的article.asp?id=xxx都要重定向到静态文件 article/xxx.htm,nginx 的rewrite比apache的强大很多,还可以用if语句,很容易理解,下面看看Nginx是如何进行 Rewrite的!
提示:以下rewrite指令写在 nginx.conf 配置的 server { ... } 中
最常见的:静态地址重定向到带参数的动态地址
view plaincopy to clipboardprint?
rewrite "^(.*)/service/(.*)\.html$" $1/service.php?sid=$2 permanent;
反过来:带参数的动态地址重定向到静态地址
view plaincopy to clipboardprint?
if ($query_string ~* id=(.*)) {
set $id $1;
rewrite "^(.*)/article.asp$" $1/article/$id.htm last;
}
泛域名解析
view plaincopy to clipboardprint?
server_name *;
server_name_in_redirect off;
#设置默认root
set $rootdir /usr/local/nginx/html/w3cgroup/;
#匹配三级域名
if ($host ~* ^([^\.] )\.([^\.] )\.([^\.] )\.([^\.] )$) {
set $rootdir /usr/local/nginx/html/w3cgroup/$2/$1;
#三级域名中有访问指定的目录则重定向到相应的二级域名下
rewrite "^. upload/?(.*)$" /$1 permanent; rewrite "^. ijc/?(.*)$" /$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/?(.*)$" /$1 permanent; rewrite "^. ijc/?(.*)$" /$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
参考:
/dh20156/article.asp?id=263
/NginxHttpRewriteModule /blog/?p=240。

相关文档
最新文档