rewrite

Nginx Rewrite相关功能

和自甴很熟 提交于 2020-01-10 18:03:09
Nginx服务器利⽤ngx_http_rewrite_module 模块解析和处理rewrite请求,此功能依靠 PCRE(perl compatible regularexpression),因此编译之前要安装PCRE库,rewrite是nginx服务器的重要功能之⼀,⽤于实现URL的重写,URL的重写是⾮常有⽤的功能,⽐如它可以在我们改变⽹站结构之后,不需要客⼾端修改原来的书签,也⽆需其他⽹站修改我们的链接,就可以设置为访问,另外还可以在⼀定程度上提⾼⽹站的安全性。 1 ngx_http_rewrite_module模块指令 官方文档:https://nginx.org/en/docs/http/ngx_http_rewrite_module.html 1.1 if指令 # ⽤于条件匹配判断,并根据条件判断结果选择不同的Nginx配置,可以配置在server或location块中进⾏配置,Nginx的if语法仅能使⽤if做单次判断,不⽀持使⽤if else或者if elif这样的多重判断,⽤法如下: if (条件匹配) { action } # 使⽤正则表达式对变量进⾏匹配,匹配成功时if指令认为条件为true,否则认为false,变量与表达式之间使⽤以下符号链接: = #⽐较变量和字符串是否相等,相等时if指令认为该条件为true,反之为false。 != #

Rewrite跳转场景

血红的双手。 提交于 2020-01-10 17:34:15
Rewrite跳转场景 URL看起来更规范,合理 企业会将动态URL地址伪装成静态地址提供服务 网址换新域名后,让旧的访问跳转到新的域名上 服务端某些业务调整 Rewrite跳转实现 Rewrite实用场景 Nginx跳转需求的实现方式 使用rewrite进行匹配跳转 使用if匹配全局变量后跳转 使用location匹配再跳转 rewrite放在server{},if{},location{}段中 对域名或参数字符串 使用if全局变量匹配 使用proxy_pass反向代理 常用的正则表达式元字符 字符 说明 ^ 匹配输入字符串的起始位置 $ 匹配输入字符串的结束位置 * 匹配前面的字符零次或多次 + 匹配前面的字符一次或多次 ? 匹配前面的字符零次或一次 . 匹配除\n之外的任何单个字符,使用诸如"[.\n]"之类的模式,可匹配包括"\n"在内的任意字符 \d 匹配纯数字 [0-9] {n} 重复多次 {n,} 重复n次或更多次 [c] 匹配单个字符c [a-z] 匹配a-z小写字母的任意一个 [a-zA-Z] 匹配a-z小写字母或A-Z大写字母的任意一个 Rewrite命令 语法: rewrite <regex> <replacement> [flag]; 正则 跳转后的内容 rewrite支持的flag标记 flag标记说明: 标记 说明 last 相当于Apache的[L

Using .htaccess to set a sub directory as root directory [closed]

不想你离开。 提交于 2020-01-10 01:59:05
问题 Closed. This question is off-topic. It is not currently accepting answers. Want to improve this question? Update the question so it's on-topic for Stack Overflow. Closed 7 years ago . Is there a way to use htaccess to tell a subdirectory to act as the root for the entire site? For example, if I had a website under http://localhost/testsite/ and in it's index.php file I had a reference to the stylesheet using the following code.. <link rel="stylesheet" type="text/css" href="/css/layout.css" />

Nginx之一

孤者浪人 提交于 2020-01-10 00:04:37
libevent :高性能的网络库   epoll() nginx调用了libevent库中的epoll Epoll --异步模型   支持一个进程打开大数目的socket描述符   IO效率不随FD数据增加而线性下降   使用mmap加速内核与用户空间的消息传递   边缘出发和水平触发 Nginx 采用C进行编写,不论是系统资源开销还是CPU使用率都比Perlbal要好很多 优点:    主要应用类别:   使用Nginx结合FastCGI运行PHP、JSP、Perl等程序   使用Nginx作反向代理、负载均衡、规则过滤   使用Nginx运行静态HTML页面、图片   Nginx与其他新技术的结合应用 基本功能:   静态资源的web服务器,能缓存打开的文件描述符;   http、smtp、pop3协议的反向代理服务器;   缓存加速、负载均衡;   支持FastCGI(fpm、LNMP),uWSGI(Python);   模块化(非DSO机制)、过滤器zip、SSI及图像的大小调整;   支持SSL 扩展功能:   基于名称和IP的虚拟主机;   支持平滑升级,支持url rewrite,支持路径别名;   支持keepalive;   支持基于IP及用户访问控制;   支持速率限制,支持并发数限制  三、Nginx的模块与工作原理   Nginx由内核和模块组成

Nginx 之 Rewrite

半世苍凉 提交于 2020-01-08 15:26:18
文章目录 一、环境准备 二、Rewrite 介绍 2.1、Rewrite跳转场景 2.2、Rewrite 实用场景 2.3、常用的正则表达式元字符 2.4、Rewrite 命令 2.5、location 分类 2.6、location 优先级 三、具体场景 3.1、场景一:基于域名的跳转 3.2、场景二:基于客户端IP地址访问跳转 3.3、场景三:基于旧、新域名跳转并加目录 3.4、场景四:基于参数匹配跳转 3.5、场景五:基于目录下所有php文件跳转 一、环境准备 一台nginx服务器提供 www.accp.com 的网页。 1、安装rpm源 rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm 2、直接用yum安装nginx和bind yum install nginx bind -y 3、DNS域名解析 vim /etc/named.conf vim /etc/named.rfc1912.zones ##复制添加一段 zone "accp.com" IN { type master; file "accp.com.zone"; allow-update { none; }; }; cd /var/named cp -p named

why does the regex in my rewrite condition seem to not catch?

余生长醉 提交于 2020-01-07 08:07:49
问题 I have URLs like the following: mysite.com/eng?sentence=dog and I want to rewrite them as mysite.com/eng/dog so I want to replace ?sentence= with a "/" I have tried all of the following: RewriteCond %{THE_REQUEST} ^GET\ sentence= [NC] RewriteRule ^ /%1 [NC,L,NE] RewriteCond %{THE_REQUEST} ^GET\ \?sentence= [NC] RewriteRule ^ /%1 [NC,L,NE] RewriteCond %{THE_REQUEST} ^GET\ \?sentence=([^/?&\s]+) [NC] RewriteRule ^ /%1 [NC,L,NE] RewriteCond %{THE_REQUEST} ^GET\s/+\?sentence=([^/?&\s]+) [NC]

nginx源码分析——http多阶段处理

帅比萌擦擦* 提交于 2020-01-07 07:56:28
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1. 多阶段处理概述 nginx将一个http请求分为顺序的多个处理阶段,前一个阶段的结果会影响后一个阶段的处理。例如,ngx_http_access_module模块根据IP信息拒绝一个用户请求后,本应接着执行的其他HTTP模块将没有机会再处理这个请求。 nginx之所以要把http请求的处理过程分为多个阶段,是因为nginx的模块化设计使得每一个http模块可以仅专注于完成一个独立的、简单的功能,而一个请求的完整处理过程可以由无数个HTTP模块共同合作完成。这种设计有非常好的简单性、可测试性、可扩展性,然而,当多个HTTP模块流水式地处理同一个请求时,单一的顺序是无法满足灵活性需求的,每一个正在处理请求的HTTP模块很难灵活、有效地指定下一个HTTP处理模块时哪一个。而且,不划分处理阶段也会让HTTP请求的完整处理流程难以管理,每一个HTTP模块也很难正确的将自己插入到完整流程的合适位置中。 nginx依据常见的处理流程将处理阶段划分为11个阶段,其中每个处理阶段都可以由任意多个HTTP模块流水式地处理请求。对于这11个处理阶段,有些阶段是必备的,有些阶段是可选的,当然也可以有多个HTTP模块同时介入同一处理阶段。 2. 多阶段处理相关的结构体 阶段的枚举定义 typedef enum { //

Nginx 伪静态Rewrite,重定向Location配置总结(转)

情到浓时终转凉″ 提交于 2020-01-07 06:15:57
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 语法规则: location [=|~|~*|^~] /uri/ { … } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。 ~ 开头表示区分大小写的正则匹配 ~* 开头表示不区分大小写的正则匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则 / 通用匹配,任何请求都会匹配到。 多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考): 首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。 例子,有如下匹配规则: location = / { #规则A } location = /login { #规则B } location ^~ /static/ { #规则C } location ~ \.(gif|jpg|png|js|css)$ { #规则D } location ~* \.png$ { #规则E } location !~ \.xhtml$ { #规则F } location

nginx rewite 语法 (二)

送分小仙女□ 提交于 2020-01-07 00:46:57
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 说明:rewrite是实现URL重定向的重要指令,他根据regex(正则表达式)来匹配内容跳转到replacement,结尾是flag标记 例子: rewrite ^/(.*) http://www.baidu.com/ permanent; # 匹配成功后跳转到百度,执行永久301跳转 1. rewite 语法 2. 使用例子: (1)根据访问地址匹配 (2)判断 是不是 ie 浏览器,将ie所有的请求重写到 ie.html 上去 来源: oschina 链接: https://my.oschina.net/u/3631797/blog/3153428

How can I get use outside information in url rewrites?

这一生的挚爱 提交于 2020-01-07 00:36:10
问题 Hopefully some of you .htaccess gurus can help me out with this one. I have never spent any time messing around with .htaccess before, so I'm a bit lost. Basically I want to take a link such as example.com/index.php?id=3 and convert it to http://example.com/pagename/ I can easily change it so that the link converts to http://example.com/directory/3 or something along those lines, but I don't really understand how people accomplish the change I'm looking for. I know that Wordpress does