这里尽量不写到正则,简单为主。 方法对,自己再去根据情况修改即可。 关于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) |