nginx rewrite基础语法及一些实例整理#
![]() | ![]() | ![]() | ![]() |
| 【性价之王】 | 【线路之王】 | 【价格之王】 | 【配置之王】 |
| 【免费之王】 | 【香港首推】 | 【梯子之王】 | 【独服之王】 |

对于门外汉的我来说不懂什么程序,不懂什么语法,但依葫芦画瓢相信多数还是会做的,今天整理一下nginx下的rewrite的一些基础性的东西!
nginx rewrite 正则表达式匹配
大小写匹配
~ 为区分大小写匹配
~* 为不区分大小写匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配
文件及目录匹配
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
flag标记
last 相当于Apache里的[L]标记,表示完成rewrite
break 终止匹配, 不再匹配后面的规则。
redirect 返回302临时重定向 地址栏会显示跳转后的地址。
permanent 返回301永久重定向 地址栏会显示跳转后的地址。
location的几个使用实例
1)location / { }:匹配任何查询,因为所有请求都以 / 开头。但是正则表达式规则将被优先和查询匹配。
2)location =/ {}:仅仅匹配/
3)location ~* \.(gif|jpg|jpeg)$
{
rewrite \.(gif|jpg)$ /logo.png;
}:location不区分大小写,匹配任何以gif,jpg,jpeg结尾的文件。
rewrite 几个实例
多目录转成参数
要求:abc.domian.com/sort/2 => abc.domian.com/index.php?act=sort&name=abc&id=2
规则配置:
if ($host ~* (.*)\.domain\.com) {
set $sub_name $1;
rewrite ^/sort\/(\d+)\/?$ /index.php?act=sort&cid=$sub_name&id=$1 last;
}
目录对换
要求:/123456/xxxx -> /xxxx?id=123456
规则配置:
rewrite ^/(\d+)/(.+)/ /$2?id=$1 last;
再来一个针对浏览器优化的自动rewrite,这里rewrite后的目录可以是存在的;
例如设定nginx在用户使用ie的使用重定向到/nginx-ie目录
规则如下:
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /nginx-ie/$1 break;
}
目录自动加“/” ,这个功能一般浏览器自动完成
if (-d $request_filename){
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
以下这些可能就跟广义的rewrite重写无关了
禁止htaccess
location ~/\.ht {
deny all;
}
禁止多个目录
location ~ ^/(cron|templates)/ {
deny all; break;
}
禁止以/data开头的文件,可以禁止/data/下多级目录下.log.txt等请求
location ~ ^/data {
deny all;
}
禁止单个文件
location ~ /data/sql/data.sql {
deny all;
}
给favicon.ico和robots.txt设置过期时间; 这里为favicon.ico为99天,robots.txt为7天并不记录404错误日志
location ~(favicon.ico) {
log_not_found off;
expires 99d;
break;
}
location ~(robots.txt) {
log_not_found off;
expires 7d;
break;
}
设定某个文件的浏览器缓存过期时间;这里为600秒,并不记录访问日志
location ^~ /html/scripts/loadhead_1.js {
access_log off;
expires 600;
break;
}
Nginx还可以自定义某一类型的文件的保质期时间,具体写法看下文的代码:
location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ {
if (-f $request_filename) {
expires 1h;
break;
}
}
//上段代码就将js|css|jpg|jpeg|gif|png|swf这类文件的保质期设置为一小时。
防盗链的设置
防盗链:如果你的网站是个下载网站,下载步骤应该是先经过你的主页找到下载地址,才能下载,为了防止某些网友直接访问下载地址完全不通过主页下载,我们就可以使用防盗链的方式,具体代码如下:
location ~* \.(gif|jpg|swf)$ {
valid_erers none blocked start.igrow.cn sta.igrow.cn;
if ($invalid_erer) {
rewrite ^/ http://$host/logo.png;
}
}
文件反盗链并设置过期时间–<盗链多次请求也会打开你的站点的图片啊,所以设置下缓存时间,不会每次盗链都请求并下载这张图片>
location ~* ^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_erers none blocked *.capfu.com *.capfu.com.cn *.lanwei.org *.capfu.org localhost 42.121.107.189;
if ($invalid_erer) {
rewrite ^/ http://img.capfu.com/forbid.gif;
return 417;
break;
}
access_log off;
break;
}
说明:
这里的return 417 为自定义的http状态码,默认为403,方便通过nginx的log文件找出正确的盗链的请求地址
“rewrite ^/ http://img.capfu.com/forbid.gif;”显示一张防盗链图片
“access_log off;”不记录访问日志,减轻压力
“expires 3d”所有文件3天的浏览器缓存
只充许固定ip访问网站,并加上密码;这个对有权限认证的应用比较在行
location \ {
allow 22.27.164.25; #允许的ipd
deny all;
auth_basic “KEY”; #认证的一些设置
auth_basic_user_file htpasswd;
}
说明:location的应用也有各种变化,这里的写法就针对了根目录了。
文件和目录不存在的时重定向
if (!-e $request_filename) {
#proxy_pass http://127.0.0.1; #这里是跳转到代理ip,这个代理ip上有一个监听的web服务器
rewrite ^/ http://www.capfu.com/none.html; #跳转到这个网页去
#return 404; #直接返回404码,然后会寻找root指定的404.html文件
}
域名跳转
server {
listen 80;
server_name jump.capfu.com ;#需要跳转的多级域名
index index.html index.htm index.php; #入口索引文件的名字
root /var/www/public_html/; #这个站点的根目录
rewrite ^/ http://www.capfu.com/;
#rewrite到这个地址,功能表现:在浏览器上输入jump.capfu.com并回车,不会有任何提示直接变成www.capfu.com
access_log off;
}
多域名转向
server {
listen 80;
server_name www.capfu.com www.capfu.org;
index index.html index.htm index.php;
root /var/www/public_html/;
if ($host ~ “capfu\.org”) {
rewrite ^(.*) http://www.capfu.com$1 permanent;
}
}
三级域名跳转
if ($http_host ~* “^(.*)\.i\.capfu\.cn$”) {
rewrite ^(.*) http://demo.capfu.com$1;
break;
}
域名镜向
server {
listen 80;
server_name mirror.capfu.com;
index index.html index.htm index.php;
root /var/www/public_html;
rewrite ^/(.*) http://www.capfu.com/$1 last;
access_log off;
}
某个子目录作镜向,这里的示例是demo子目录
location ^~ /demo {
rewrite ^.+ http://demo.capfu.com/ last;
break;
}
emlog系统的rewrite
location ~ {
if (!-e $request_filename) {
rewrite ^/(.+)$ /index.php last;
}
}
[教程分享]历史优惠活动内容
猜你可能想看的VPS
- 圣诞促销 RackNerd→512M 内存 11G SSD 2.5T 流全球[VPS测评]
- $6 月 2 核 CPU 5G 内存 100G SSD 100Mbps 全球[VPS测评]
- ZetServers→€119 月 E3-1220v3 8GB 内存 2全球[VPS测评]
- 疯狂猜成语 图猜成语五个人头上都有圆圈站在一起 旁边还有一个人头上也有圆全球[VPS测评]
- 便宜 腾讯云 88 元 年的 1G 云服器又开卖了 每天 4 场秒杀 场全球[VPS测评]
- 极光 KVM→国庆促销 三网 CN2 GIA 包年 199.8 元 年 全球[VPS测评]
- a 标签提交表单的方法全球[VPS测评]
- [11.11]傲游主机全场 65 折 充值 511 元送 111 元 年全球[VPS测评]
- Piios 阿里云深港 IPLC 沪美 IPLC,30Mbps 可以长时全球[VPS测评]
- [5.1]DediPath 全场 VPS 四折 洛杉矶 1Gbps 不限独立服务器[U]
- 优惠 Name 七月域名注册优惠活动→20 种域名促销优惠 低至 0.9全球[VPS测评]
- jQuery 选择自定义属性为指定内容的元素全球[VPS测评]
- 流量翻倍 RootNerds→日本直连线路 VPS OpenVZ 虚拟架日本VPS[主机]
- 红米 Redmi K20Pro MIUI 11 欧版 ROM 刷机教程全球[VPS测评]
- WordPress插件:nix-gravatar-cache汉化版实现G全球[VPS测评]
- DataPacket-美国德州 $4.99 月 1G内存16核50g硬盘美国VPS[主机]
- wordpress 上传附件报错 “抱歉,出于安全的考虑,不支持此文件类全球[VPS测评]
- 6种样式社交论坛网站HTML5模板 - Social全球[VPS测评]
- 互盟云怎么样?1核2G云服务器仅468元/年,香港云主机58元/月香港VPS[主机]
- Vultr新用户100美金 最新活动来啦!新用户充值活动来了,充100美全球[VPS测评]
- CMIVPS,香港vps终身八折$7.76/月起,1核1G内存,香港沙田香港VPS[主机]
- Rustrot-深绿色UI电商网站模板HTML5框架全球[VPS测评]
- 咖啡主机:美国高防vps、香港vps 可享受6-7折促销 每月仅需14元美国VPS[主机]
- GreenCloudVPS:5折、6折优惠,日本、新加坡、香港等KVM 日本VPS[主机]
- ucloud香港服务器怎么样?听听这些网友们怎么说的香港VPS[主机]
- 播放量破千万,点赞量破百万,你绝对想不到这三款多功能产品居然在TK上卖爆全球[VPS测评]
- 初忆云:湖北电信云服务器1核2G仅6.8/月,81.6元/年;香港cn2香港VPS[主机]
- CMIVPS:香港vps/2核/2GB/20GB空间/不限流量/KVM/虚拟空间(主机)
- 向日葵-漏洞科普:海外云服务器三种漏洞修复方法快收藏起来!全球[VPS测评]
- 云米科技:香港安畅/美国Cera/日本CN2机房,海外云服务器最低11元日本VPS[主机]
转载请注明原文地址:http://140.238.13.167:12355/read-77383.html











