当前位置: > Linux服务器 > nginx >

nginx的那些破规则;遇到一个写一个。

时间:2015-05-27 00:36来源:linux.it.net.cn 作者:IT

这里尽量不写到正则,简单为主。
方法对,自己再去根据情况修改即可。
关于rewrite的flag标记:
last – 基本上都用这个Flag   浏览器地址栏的URL地址不变,但是在服务器端访问的路径发生了变化
break – 中止Rewirte,不在继续匹配   浏览器地址栏的URL地址不变,但是在服务器端访问的路径发生了变化
redirect – 返回临时重定向的HTTP状态302 浏览器地址栏会显示跳转后的URL地址
permanent – 返回永久重定向的HTTP状态301 浏览器地址栏会显示跳转后的URL地址
HTTP状态301跟HTTP状态302有啥区别这里顺便说下:
301的含义是"永久重定向"
302的含义是"临时重定向"
2个在服务端的性能是一样的,但是对于搜索引擎来说,301更加友好,所以建议都用301来跳转。
------------------------------------------------------------
1 文件不存在,跳到指定错误页面 如404  503 500 等
2 文件不存在,交给index.php处理,如 Wordpress
3 一个页面跳转到另一个页面
4 单独针对某个或者多个文件(文件夹)进行处理
5 单独处理某个或者多个php文件
6 禁止访问某个文件夹或者某个文件
7 只允许访问某个文件
8 域名跳转
9 带问号(?)带参数的rewrite
10  禁止访问某种类型的文件 如 .sh
11 禁止访问.svn文件夹
12 静态文件缓存1年
13 html文件不缓存
14 http://domain_name/index.html 跳转到 http://domain_name
http://domain_name/index.html?test  跳转到 http://domain_name
http://domain_name/?test  跳转到 http://domain_name
防止循环重定向【已超过 20 次重定向】导致500
15 整站跳转到指定页面,如404.html
16 禁止访问linux上的隐藏文件或者隐藏文件夹以及*.sh文件 这个比较使用,我们的每个虚机都必加,什么svn、git全部去屎吧

end 常见正则
----------------------------------------------------------
1 文件不存在,跳到指定错误页面 如404  503 500 等
error_page 404 = /404.html;               //跳转到指定页面
error_page 404 = http://www.baidu.com;    //跳转到某个站点
error_page  500 502 503 504 = /50x.html;  //不同的状态码可以写一起

2 文件不存在,交给index.php处理,如 Wordpress。
if (!-e $request_filename)
{
  rewrite ^/.*$ /index.php last;
}
或者
try_files $uri $uri/ /index.php?q_request_uri=$uri&$args;
官网解释:
try_files is basically a replacement for the typical mod_rewrite style file/directory existence check. It is supposed to be moreefficient than using if
所以尽量用try_files

3 一个页面跳转到另一个页面
rewrite /uninstall.html /uninstall.php;   //跳转到指定页面
rewrite /uninstall.html http://www.qq.com;  //跳转到网站

4 单独针对某个或者多个文件(文件夹)进行处理。
location ~ (/host.jpg$|/testdir/hello.jpg$)
{
access_log /www/hello.lks.com/1.log;
  }

5 单独处理某个或者多个php文件
location ~ /(action.php|software.php|open.php|error.php|lks.php)$
{
access_log logs/test.log;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}

6 禁止访问根目录下某个文件夹或者某个文件(注意路径)
location ~ (^/test/(.*)$|^/hello.jpg$)       //禁止访问根目录下test文件夹和hello.jpg
{
return 404;
}

7 只允许访问某个文件
if ( $uri !~ "/host.jpg")
{
return 403;
}

8 域名跳转
if ($host != 'www.baidu.com' )
{
      rewrite ^/(.*)$   http://www.qq.com/$1 permanent;
}

9 带问号(?)带参数的rewrite
看另一篇日志   http://blog.163.com/a12333a_li/blog/static/87594285201273101119901/

10 禁止访问某种类型的文件 如 .sh
location ~ .*\.sh?$
{
return 403;
}

11 禁止访问.svn文件夹
location ~*/.svn/
{
return 403;
}

12 静态文件缓存1年
  location ~ .*\.(gif|jpg|jpeg|png|bmp|ico|css|xml|js|swf)$
       {
        expires    1y;
       }

13   html文件不缓存
location ~ .*\.html$
{
add_header Cache-Control no-store;
}

14    http://domain_name/index.html  跳转到 http://domain_name
http://domain_name/index.html?test  跳转到 http://domain_name
http://domain_name/?test  跳转到 http://domain_name
防止循环重定向【已超过 20 次重定向】导致500
server_name domain_name
....
if ($request_uri ~ "/index.html(.*)|/\?(.*)")
{
return  http://domain_name;
}
15 整站跳转到指定页面,如404.html

if ( $uri !~ "/404.html")
{
    rewrite ^/(.*)$ /404.html ;
}

16 禁止访问linux上的隐藏文件或者隐藏文件夹以及*.sh文件 这个比较使用,我们的每个虚机都必加。
location ~ (.*\.sh?$|/\.)
{
    deny all;
  }
  apache的规则:
  RewriteEngine On
  RewriteRule /\.  http://www.baidu.com [F]
  RewriteRule .*\.sh?$  http://www.baidu.com [F]

end 常见正则
.(句号) 匹配任意单个字符。
^(脱字号) 匹配出现在行首或字符串开始位置的空字符串。
$(美元符号) 匹配出现在行末的空字符串。
A 匹配大写字母 A。
a 匹配小写字母 a。
/d 匹配任意一位数字。
/D 匹配任意单个非数字字符。
/w 匹配任意单个字母数字字符,同义词是 [:alnum:]。
[A-E] 匹配任意大写的 A、B、C、D 或 E。
[^A-E] 匹配除 A、B、C、D 和 E 之外的任意字符。
X? 匹配出现零次或一次的大写字母 X。
X* 匹配零个或任意个大写 X。
X+ 匹配一个或多个字母 X。
X{n} 精确匹配 n 个字母 X。
X{n,m} 匹配最少 n 个并且不超过 m 个字母 X。如果省略 m,表达式将尝试匹配最少 n 个 X。
(abc|def)+ 匹配一连串的(最少一个) abc 或 def;abc 和 def 将匹配。

举个例子:
rewrite ^/article/(\d+)/(/d+).html$ /index.php?c=public&a=article&cid=$1&aid=$2 last;
第一个(\d+)为第一个正则,后面的$1应用此参数
第二个(\d+)为第二个正则,后面的$2应用此参数
如果有多个,类推。
假设用户访问为
http://www.test.com/article/12/34.html  则实际访问地址为:
http://www.test.com//index.php?c=public&a=article&cid=12&aid=34 (责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容