Nginx核心教程之Nginx Rewrite语法规则和伪静态规则详解
文件及目录匹配:
-f 和 !-f 用来判断是否存在文件 -d 和 !-d 用来判断是否存在目录 -e 和 !-e 用来判断是否存在文件或目录 -x 和 !-x 用来判断文件是否可执行
正则表达式匹配:
* ~ 为区分大小写匹配 * ~* 为不区分大小写匹配 * !~和!~*分别为区分大小写不匹配及不区分大小写不匹配
flag标记有:
last 相当于Apache里的[L]标记,表示完成 rewrite break 终止匹配, 不再匹配后面的规则 redirect 返回302临时重定向 地址栏会显示跳转后的地址 permanent 返回301永久重定向 地址栏会显示跳转后的地址
一些可用的全局变量有,可以用做条件判断:
$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变量及功能含义:
$arg_PARAMETER 功能:如果在请求中设置了查询字符串,那么这个变量包含在查询字符串是GET请求PARAMETER中的值。 $args 功能:该变量的值是GET请求在请求行中的参数。 $binary_remote_addr 功能:二进制格式的客户端地址 $body_bytes_sent 功能:响应体的大小,即使发生了中断或者是放弃,也是一样的准确。 $content_length 功能:该变量的值等于请求头中的Content-length字段的值 $cookie_COOKIE 功能:该变量的值是cookie COOKIE的值 $document_root 功能:该变量的值为当前请求的location(http,server,location,location中的if)中root指令中指定的值。 $document_uri 功能:同$uri $host 功能:该变量的值等于请求头中Host的值。如果Host无效时,那么就是处理该请求的server的名称。 在下列情况中,$host变量的取值不同于$http_host变量。 当请求头中的Host字段未指定(使用默认值)或者为空值,那么$host等于server_name指令指定的值。 当Host字段包含端口是,$host并不包含端口号。另外,从0.8.17之后的nginx中,$host的值总是小写。 $hostname 功能:有gethostname返回值设置机器名。 $http_HEADER 功能:该变量的值为HTTP 请求头HEADER,具体使用时会转换为小写,并且将“——”(破折号)转换为"_"(下划线)。 $is_args 功能: 如果设置了$args,那么值为“?”,否则为“” $limit_rate 功能:该变量允许限制连接速率。 $nginx_version 功能: 当前运行的nginx的版本号 $query_string 功能:同$args $remote_addr 功能:客户端的IP地址 $remote_user 功能: 该变量等于用户的名字,基本身份验证模块使用。 $remote_port 功能: 客户端连接端口 $request_filename 功能:该变量等于当前请求文件的路径,有指令root或者alias和URI构成。 $request_body 功能:该变量包含了请求体的主要信息。该变量与proxy_pass或者fastcgi_pass相关。 $request_body_file 功能:客户端请求体的临时文件。 $request_completion 功能:如果请求成功完成,那么显示“OK”。如果请求没有完成或者请求不是该请求系列的最后一部分,那么它的值为空。 $request_method 功能:该变量的值通常是GET或者POST。 $request_uri 功能:该变量的值等于原始的URI请求,就是说从客户端收到的参数包括了原始请求的URI,该值是不可以被修改的,不包含主机名,例如“/foo/bar.php?arg=baz”。 $scheme 功能:该变量表示HTTP scheme(例如HTTP,HTTPS),根据实际使用情况来决定, 例如:rewrite ^ $scheme://example.com$uri redirect; $server_addr 功能:该变量的值等于服务器的地址。通常来说,在完成一次系统调用之后就会获取变量的值,为了避开系统钓鱼,那么必须在listen指令中使用bind参数。 $server_name 功能:该变量为server的名字。 $server_port 功能:该变量等于接收请求的端口。 $server_protocol 功能:该变量的值为请求协议的值,通常是HTTP/1.0或者HTTP/1.1 $uri 功能:该变量的值等于当前请求中的URI(没有参数,不包括$args)的值。它的值不同于request_uri,由浏览器客户端发送的request_uri的值。例如,可能会被内部重定向或者使用index。 另外需要注意:$uri不包含主机名,例如 "/foo/bar.html" 当前判断URL= $scheme://$server_name/$url
location 匹配的优先级(来自实践总结中)
(location =) > (location 完整路径 >) >(location ^~ 路径) >(location ~* 正则) >(location 路径) 只要匹配到,其它的都会忽略,然后返回到改匹配。
往期文章
Nginx系列教程(1)nginx基本介绍和安装入门
Nginx系列教程(2)nginx搭建静态资源web服务器
Nginx系列教程(3)nginx缓存服务器上的静态文件
Nginx系列教程(4)nginx处理web应用负载均衡问题以保证高并发
Nginx系列教程(5)如何保障nginx的高可用性(keepalived)
Nginx系列教程(6)nginx location 匹配规则详细解说
Nginx系列教程(7)nginx rewrite配置规则详细说明
Nginx系列教程(8)nginx配置安全证书SSL
Nginx系列教程(9)nginx 解决session一致性
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
代码行数减少30-90%!多邻国从Java迁移到Kotlin的奇妙体验
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 英文学习 App Duolingo(多邻国)的 Android 版最初是使用 Java 开发的,并一直沿用了 5 年。两年后,它变成了 100% 的 Kotlin App!从代码可维护性和开发者满意度方面来看,这次迁移是一个巨大的成功。 网上已经有很多 Kotlin 的学习资源,所以在这篇文章中,我们将重点介绍如何将一个有百万用户的 App 迁移到 Kotlin。 为什么选择 Kotlin 2018 年初,我们开始考虑使用 Kotlin,当时 Android 对 Kotlin 的支持还不到一年时间,而且不知道 Kotlin 会像现在这样流行,也不知道它会取代 Java 成为 Android 的开发首选语言。 我们当时的主要预期: 生产力。Kotlin 比 Java 要简洁得多,编写 Kotlin 代码速度更快,维护起来也更容易。它与 Java 的无缝互操作性以及添加语言新特性的方式让 Android 开发者可以轻松上手。 稳定性。我们的代码库历史记录中有 100 多次提交都与“修复 Nu...
- 下一篇
Nginx教程之Rewrite语法规则和开源网站程序伪静态规则详解
nginx里使用伪静态是直接在nginx.conf 中写规则的,并不需要像apache要开启写模块(mod_rewrite)才能进行伪静态。 nginx只需要打开nginx.conf配置文件,在server里面写需要的规则即可。 复制代码代码如下: server { listen 80; server_name bbs.jb51.net; index index.html index.htm index.php; root /home/www/bbs; error_page 404 /404.htm; #配置404错误页面 location ~ .*.(php|php5)?$ { #fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fcgi.conf; } 下面就是伪静态了 location /{ rewrite ^(.*)/equip(d+).html$ $1/index.php?m=content&c=index&...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启