首页 > 帮助中心 > 服务器托管常见问题 > Nginx conf 跳转参数与实例

资讯分类



Nginx conf 跳转参数与实例

日期:2017-12-05    共阅 [ 868 ] 次

正则表达式匹配,其中:

  1. * ~ 为区分大小写匹配

  2. * ~* 为不区分大小写匹配

  3. * !~和!~*分别为区分大小写不匹配及不区分大小写不匹配

文件及目录匹配,其中:

  1. * -f和!-f用来判断是否存在文件

  2. * -d和!-d用来判断是否存在目录

  3. * -e和!-e用来判断是否存在文件或目录

  4. * -x和!-x用来判断文件是否可执行

flag标记有:

  1. * last 相当于Apache里的[L]标记,表示完成rewrite

  2. * break 终止匹配, 不再匹配后面的规则

  3. * redirect 返回302临时重定向 地址栏会显示跳转后的地址

  4. * permanent 返回301永久重定向 地址栏会显示跳转后的地址

一些可用的全局变量有,可以用做条件判断(待补全)

  1. $args

  2. $content_length

  3. $content_type

  4. $document_root

  5. $document_uri

  6. $host

  7. $http_user_agent

  8. $http_cookie

  9. $limit_rate

  10. $request_body_file

  11. $request_method

  12. $remote_addr

  13. $remote_port

  14. $remote_user

  15. $request_filename

  16. $request_uri

  17. $query_string

  18. $scheme

  19. $server_protocol

  20. $server_addr

  21. $server_name

  22. $server_port

  23. $uri

结合QeePHP的例子

  1. if (!-d $request_filename) {

  2. rewrite ^/([a-z-A-Z]+)/([a-z-A-Z]+)/?(.*)$ /index.php?namespace=user&controller=$1&action=$2&$3 last;

  3. rewrite ^/([a-z-A-Z]+)/?$ /index.php?namespace=user&controller=$1 last;

  4. break;

多目录转成参数
abc.domian.com/sort/2 => abc.domian.com/index.php?act=sort&name=abc&id=2

  1. if ($host ~* (.*)\.domain\.com) {

  2. set $sub_name $1;  

  3. rewrite ^/sort\/(\d+)\/?$ /index.php?act=sort&cid=$sub_name&id=$1 last;

  4. }

目录对换
/123456/xxxx -> /xxxx?id=123456

  1. rewrite ^/(\d+)/(.+)/ /$2?id=$1 last;

例如下面设定nginx在用户使用ie的使用重定向到/nginx-ie目录下:

  1. if ($http_user_agent ~ MSIE) {

  2. rewrite ^(.*)$ /nginx-ie/$1 break;

  3. }

目录自动加“/”

  1. if (-d $request_filename){

  2. rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;

  3. }

禁止htaccess

  1. location ~/\.ht {

  2.         deny all;

  3.     }

禁止多个目录

  1. location ~ ^/(cron|templates)/ {

  2.         deny all;

  3. break;

  4.     }

禁止以/data开头的文件
可以禁止/data/下多级目录下.log.txt等请求;

  1. location ~ ^/data {

  2.         deny all;

  3.     }

禁止单个目录
不能禁止.log.txt能请求

  1. location /searchword/cron/ {

  2.         deny all;

  3.     }

禁止单个文件

  1. location ~ /data/sql/data.sql {

  2.         deny all;

  3.     }

给favicon.ico和robots.txt设置过期时间;
这里为favicon.ico为99天,robots.txt为7天并不记录404错误日志

  1. location ~(favicon.ico) {

  2.                 log_not_found off;

  3. expires 99d;

  4. break;

  5.     }

  6.     location ~(robots.txt) {

  7.                 log_not_found off;

  8. expires 7d;

  9. break;

  10.     }

设定某个文件的过期时间;这里为600秒,并不记录访问日志

  1. location ^~ /html/scripts/loadhead_1.js {

  2.                 access_log   off;

  3.                 root /opt/lampp/htdocs/web;

  4. expires 600;

  5. break;

  6.       }

文件反盗链并设置过期时间
这里的return 412 为自定义的http状态码,默认为403,方便找出正确的盗链的请求
“rewrite ^/ http://leech.c1gstudio.com/leech.gif;”显示一张防盗链图片
“access_log off;”不记录访问日志,减轻压力
“expires 3d”所有文件3天的浏览器缓存

  1. location ~* ^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {

  2. valid_referers none blocked *.c1gstudio.com *.c1gstudio.net localhost 208.97.167.194;

  3. if ($invalid_referer) {

  4.    rewrite ^/ http://leech.c1gstudio.com/leech.gif;

  5.    return 412;

  6.    break;

  7. }

  8.                 access_log   off;

  9.                 root /opt/lampp/htdocs/web;

  10. expires 3d;

  11. break;

  12.     }

只充许固定ip访问网站,并加上密码

  1. root  /opt/htdocs/www;

  2. allow   208.97.167.194;

  3. allow   222.33.1.2;

  4. allow   231.152.49.4;

  5. deny    all;

  6. auth_basic "C1G_ADMIN";

  7. auth_basic_user_file htpasswd;

将多级目录下的文件转成一个文件,增强seo效果
/job-123-456-789.html 指向/job/123/456/789.html

  1. rewrite ^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html last;

将根目录下某个文件夹指向2级目录
如/shanghai job/ 指向 /area/shanghai /
如果你将last改成permanent,那么浏览器地址栏显是/location/shanghai/

  1. rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;

上面例子有个问题是访问/shanghai 时将不会匹配

  1. rewrite ^/([0-9a-z]+)job$ /area/$1/ last;

  2. rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;

这样/shanghai 也可以访问了,但页面中的相对链接无法使用,
如./list_1.html真实地址是/area/shanghia/list_1.html会变成/list_1.html,导至无法访问。

那我加上自动跳转也是不行咯
(-d $request_filename)它有个条件是必需为真实目录,而我的rewrite不是的,所以没有效果

  1. if (-d $request_filename){

  2. rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;

  3. }

知道原因后就好办了,让我手动跳转吧

  1. rewrite ^/([0-9a-z]+)job$ /$1job/ permanent;

  2. rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;

文件和目录不存在的时候重定向:

  1. if (!-e $request_filename) {

  2. proxy_pass http://127.0.0.1;

  3. }

域名跳转

  1. server

  2.     {

  3.             listen       80;

  4.             server_name  jump.test.com;

  5.             index index.html index.htm index.php;

  6.             root  /opt/lampp/htdocs/www;

  7.             rewrite ^/ http://www.test.com/;

  8.             access_log  off;

  9.     }

多域名转向

  1. server_name  www.test.com www.test.net;

  2.             index index.html index.htm index.php;

  3.             root  /opt/lampp/htdocs;

  4. if ($host ~ "test\.net") {

  5. rewrite ^(.*) http://www.test.com$1 permanent;

  6. }

三级域名跳转

  1. if ($http_host ~* "^(.*)\.i\.test\.com$") {

  2. rewrite ^(.*) http://top.yingjiesheng.com$1;

  3. break;

  4. }

域名镜向

  1. server

  2.     {

  3.             listen       80;

  4.             server_name  mirror.test.com;

  5.             index index.html index.htm index.php;

  6.             root  /opt/lampp/htdocs/www;

  7.             rewrite ^/(.*) http://www.test.com/$1 last;

  8.             access_log  off;

  9.     }

某个子目录作镜向

  1. location ^~ /zhaopinhui {

  2.  rewrite ^.+ http://zph.test.com/ last;

  3.  break;

  4.     }


 

 

基础产品服务
域名注册
虚拟主机
云服务器
企业邮箱
服务器托管
服务器租用
网站营销
智能建站
产品管理平台
企业解决方案
400电话
网站建设
在线客服系统
服务器运维
优化营销
数据恢复
Mysql数据库
SQL数据库
技术文档
合同文本
站长必备软件
实例与代码
代理文档
精品作品
站长论坛
展览馆
HTML5炫
关键词密度分析
IP归属地查询
备案查询
SEO查询
百度权重查询
solidworks
保持接触
联系电话:15810326078
010-68924881
技术QQ:12491287
商务QQ:22392247
技术邮箱: cpoo@163.com
联系方式
畅景论坛
客服&帮助
扫码领红包
新闻公告
代理加盟
如何网站备案
付款方式
索取发票
渠道合作
帮助中心
网站地图

微信咨询/联系:

↑ 扫描加微信咨询

北京辟谣平台 违法不良信息举报

关于畅景| 联系我们| 付款方式| 网站备案| 帮助中心| 畅景资讯| 相关下载 ||||
本站产品全面支持在线支付,自主开通及管理! 域名注册,域名查询,域名申请,虚拟主机,企业邮箱,网站建设,云主机,网络推广尽在畅景互联
版权所有 www.cpoo.com.cn 京ICP备12015531号-8 京公网安备110105018078   北京新网(Xinnet.com)认证注册服务机构 新网授权代理商

十年历史见证 超过9000家客户信誉保障 腾讯在线QQ客服:12491287 22392247

客户服务中心(7×24):15810326078 传真:010-68924881-2288