nginx伪静态重写正则支撑支撑方案
类型:站长工具大小:535KB语言:中文评分:10.0标签:立即下载。服务器最初是一个windows系统,ISAPI_Rewrite用于Url重写。规则之一是
重写器^/(.{6})(\d{3})(。)/PHP/http://www.cr173.com/qq$2.apk[NC,L,NU]
中间使用{6}表示前面的字符要重复六次,然后水平移动linux系统,使用nginx的Rewrite重写url结果。加载nginx时,会提示一个错误
重写^/(.{6})(\d{3})(。)/PHP/http://www . Cr 173.com/QQ $ 2 . apk break;
经过长时间的资源搜索,我终于在ken的文章中找到了解决方案
用英文双引号将规则的前半部分括起来,以便正常应用
例如,rewrite'/(。{6}) (\ d {3})(。)/PHP/' http://www . Cr 173.com/QQ $ 2 . apk break;
它可以正常解析
对了,我们会全面梳理nginx支持的常规资源,以备下次使用;
Nginx用正则用法说明重写伪静态配置参数和用法示例正则表达式匹配:~区分大小写匹配~ *不区分大小写匹配!~还有!~ *是区分大小写的不匹配和不区分大小写的不匹配文件和目录匹配,其中:-f和!-f用来判断是否有文件-d和!-d用来判断是否有目录-e和!-e用于判断是否有文件或目录-x和!-x用于判断文件是否可执行。标志标志为:last相当于Apache中的[L]标志,表示完成writebreak终止匹配,以下规则不再匹配。重定向返回302临时重定向地址栏将显示跳转后的地址。永久返回301永久重定向地址栏将显示跳转后的地址。$args该变量等于请求行中的参数。$content_length等于请求行中“content_length”的值。$content_type相当于请求头中“content_type”的值。$document_root相当于当前请求的根指令指定的值。$document_uri与$uri相同。$Host与请求头中“Host”行中指定的值或请求到达的服务器的名称相同(没有Host行)。$lim It_rate允许有限的连接速率$request_method相当于请求的方法,通常“GET”或“post”$ remote _ addr客户端ip$remote_port客户端port$remote_user相当于用户名。通过ngx_http_auth_basic_module验证,$request_filename是当前请求文件的路径名。由根或别名和URI请求组成的$request_body_file$request_uri包含一个带有参数的完整的初始uri。$ query _ string与$args相同。$server_protocol相当于请求的协议。服务器的ip通过使用“HTTP/1.0”或“HTTP/1.1”$ server _ addrrequest到达。通常,获取该变量值的目的是进行系统调用。为了避免系统调用,有必要在侦听指令中指定ip并使用bind参数。
$服务器名请求到达的服务器名$server_port请求到达的服务器的端口号$uri等同于当前请求中的URI,可不同于初始值,例如内部重定向时或使用指数结合QeePHP的例子if(!-d $ request _ filename){ 0重写^/([a-z-A-Z] )/([a-z-A-Z] )/?(.*)$ /index.php?命名空间=用户控制器=$ 1操作=$ 2 $ 3最后;重写^/([a-z-A-Z] )/?$ /index.php?命名空间=用户控制器=$ 1 last打破;多目录转成参数abc.domian.com/sort/2=abc.domian.com/index.php?act=sortname=abcid=2if($ host ~ *().*)\.域\。com){ set $ sub _ name $ 1;重写^/sort\/(\d)?$ /index.php?act=sort cid=$ sub _ name id=$ 1 last;}目录对换/123456/xxxx - /xxxx?id=123456重写^/(\d )/(.)//$2?id=$ 1最后例如下面设定服务器在用户使用工程师协会的使用重定向到/nginx-ie目录下:if($ http _ user _ agent ~ msie){ 0重写^(.*)$ /nginx-ie/$1中断;}目录自动加"/" if(-d $ request _ filename){ 0重写^/(.*)([^/])$ http://美元主机/1美元2美元/永久;}禁止htaccesslocation ~/\ .ht {全部拒绝;}禁止多个目录地点~ ^/(cron|templates)/@否认一切;打破;}禁止以/数据开头的文件可以禁止/数据/下多级目录下。log.txt等请求;地点~ ^/data @否认一切;}禁止单个目录不能禁止。log.txt能请求位置/搜索词/cron/全部拒绝;}禁止单个文件位置~/数据/SQL/数据。SQL {全部拒绝;}给favicon.ico和robots.txt设置过期时间;这里为favicon.ico为99 天,robots.txt为七天并不记录404错误日志位置~(fav图标。ico){ log _ not _ found off;99d到期;打破;}位置~(机器人。txt){ log _ not _ found off;过期7d;打破;}设定某个文件的过期时间;这里为600秒,并不记录访问日志位置^~/html/scripts/loadhead 1号。js { access _ log offroot/opt/lampp/htdocs/web;过期600;打破;}文件反盗链并设置过期时间这里的返回412为自定义的超文本传送协议(超文本传输协议的缩写)状态码,默认为403,方便找出正确的盗链的请求"重写^/http://leech.c1gstudio.com/leech.gif;"显示一张防盗链图片"访问_注销"不记录访问日志,减轻压力"过期3d "所有文件3天的浏览器缓存地点~* ^.\.(jpg | JPEG | gif | png | swf | rar | zip | CSS | js)$ { valid _ referers none blocked *。C1格苏迪奥。com *。C1格苏迪奥。net本地主机208.97.167.194;if($ invalid _ refer){ 0重写^/http://leech.c1gstudio.com/leech.gif;return 412;打破;} access _ log off root/opt/lampp/htdocs/web;过期3d;打破;}只充许固定互联网协议(互联网协议的缩写)访问网站,并加上密码root/opt/htdocs/www;允许208.97.167.194;允许222.33.1.2;允许231 .152 .49 .4;否认一切;auth _ basic ' C1G _ AdminAuth _ basic _ user _ file htpasswd将多级目录下的文件转成一个文件,增强搜索引擎优化效果/job-123-456-789.html指向/job/123/456/789。超文本标记语言重写^/job-([0-9] )-([0-9] )-([0-9]).html $/作业/$ 1/$ 2/作业show _ 3。html最后;将根目录下某个文件夹指向2级目录如/shanghaijob/指向/地区/上海/如果你将最后的改成永久的,那么浏览器地址栏显是/地点/上海/重写^/([0-9a-z])job/(。*)$/面积/$1/$2最后;上面例子有个问题是访问/上海时将不会匹配重写^/([0-9a-z])作业$/区域/$1/最后;重写^/([0-9a-z】)工作/。*)$/面积/$1/$2最后;这样/上海也可以访问了,但页面中的相对链接无法使用,如/list_1.html真实地址是/area/shan hia/list _ 1。超文本标记语言会变成/list_1.html,导至无法访问。
那我加上自动跳转也是不行咯(-d $request_filename)它有个条件是必需为真实目录,而我的重写不是的,所以没有效果if(-d $ request _ filename){ 0重写^/(.*)([^/])$ http://美元主机/1美元2美元/永久;}知道原因后就好办了,让我手动跳转吧重写^/([0-9a-z])作业$/$ 1作业/永久;重写^/([0-9a-z】)工作/。*)$/面积/$1/$2最后;文件和目录不存在的时候重定向:if(!-e $ request _ filename){ proxy _ pass http://127。0 .0 .1/;}域名跳转服务器{听80服务器名jump.c1gstudio.com;index.htmlindex.htmindex.php指数;root/opt/lampp/htdocs/www;重写^/http://www.c1gstudio.com/;access _ log}多域名转向服务器名http://www.c1gstudio.com/http://www.c1gstudio.net/;indexindex.htmlindex.htmindex.php;root/opt/lampp/htdocs;if ($host ~ 'c1gstudio\ .net '){ 0重写^(.*) http://www.c1gstudio.com$1/永久;}三级域名跳转if ($http_host ~* '^(.*)\.i\.c1gstudio\ .com $ '){ 0重写^(.*)http://顶。英杰生。com $ 1/;打破;}域名镜向服务器{听80服务器名mirror.c1gstudio.com;index.htmlindex.htmindex.php指数;root/opt/lampp/htdocs/www;重写^/(.*)http://www.c1gstudio.com/$1最后;访问_注销;}某个子目录作镜向地点^~/昭平汇{重写^.http://zph.c1gstudio.com/最后;打破;}discuz ucenter home (uchome)重写器写入^/(space|network)-(.)\.html$ /$1.php?重写=最后$ 2;重写^/(space|network)\.html $/$ 1。PHP最后;重写^/([0-9] )$ /space.php?uid=$1最后;讨论七重写^(.*)/archiver/((fid|tid)-[\w\-] \ .html)$ $1/archiver/index.php?最后2美元;重写^(.*)/论坛-([0-9] )-([0-9]).html$ $1/forumdisplay.php?fid=$ 2page=$ 3 last重写^(.*)/thread-([0-9])-([0-9])-([0-9]).html$ $1/viewthread.php?tid=$ 2 extra=page \=$ 4 page=$ 3 last;重写^(.*)/profile-(用户名| uid(.)\.html$ $1/viewpro.php?$2=最后$ 3;重写^(.*)/space-(用户名| uid(.)\.html$ $1/space.php?$2=最后$ 3;重写^(.*)/标记-(。)\.html$ $1/tag.php?名称=$ 2最后给网站某版块单独配置域名服务器名bbs.c1gstudio.comnews.c1gstudio.com;location=/{ if($ http _ host ~ news \。C1格苏迪奥。com $){ 0重写^.http://news.c1gstudio.com/forum-831-1.html最后;打破;} }讨论中心头像重写优化位置^~ /ucenter {location ~ .*\.php?$ { # fastcgi _ pass UNIX :/tmp/PHP-CGI。袜子;fastcgi _ pass 127。0 .0 .1:9000;index.php指数;包括fcgi.conf}位置/输入/数据/头像{ log _ not _ found offaccess _注销;位置~ /(。*)_big\ .jpg $ { error _ page 404/u center/images/noavatar _ big。gif}位置~ /(。*)_中间\。jpg $ { error _ page 404/u center/images/noavatar _ middle。gif}位置~ /(。*)_small\ .jpg $ { error _ page 404/u center/images/noavatar _ small。gif}过期300;打破;}}jspace重写位置~。*\.php?$ { # fastcgi _ pass UNIX :/tmp/PHP-CGI。袜子;fastcgi _ pass 127。0 .0 .1:9000;index.php指数;包括fcgi.conf}地点~ * ^/index.php/{rewrite ^/index.php/(.*) /index.php?一美元休息时间;fastcgi _ pass 127。0 .0 .1:9000;index.php指数;包括fcgi.conf}
Nginx正则式说明
~标识符后面是一个字符串。Nginx将在匹配此字符串后停止匹配正则表达式(首选位置指令中正则表达式的匹配结果),如location ~ /images/。你要对目录/镜像/执行一些特殊操作,比如添加过期表头、防盗链等。但是您想将过期标题添加到除此目录中的图片之外的所有图片中。此操作可能使用另一个位置,例如:位置~* \。(gif|jpg|jpeg)$。这样,如果有对/images/1.jpg的请求,nginx如何决定操作哪个位置?结果取决于标识符~。如果你写:位置/图像/,nginx将匹配1.jpg和位置~* \。(gif|jpg|jpeg)$,这不是您需要的结果。添加标识符后,在匹配字符串/图像/后,它将停止有规律地搜索其他位置。=表示确切的搜索地址,例如location=/它将只匹配uri/的请求。如果请求是/index.html,它会找到另一个位置,但不会匹配这个位置。当然,您可以编写两个位置,location=/和location/,这样/index.html就会匹配后者。如果您的站点有大量的/请求,您可以使用此方法来加快请求的响应速度。
@表示命名一个位置,即自定义一个位置,外界无法访问,只能用于Nginx生成的子请求,主要是error_page和try _ files。~区分大小写。~ *不区分大小写匹配(匹配firefox的规律性,同时匹配FireFox)。~不匹配!~ *无可匹敌。匹配除换行符以外的任何字符\w匹配字母或数字或下划线或中文字符\s匹配任何空白字符\d匹配数字\b匹配单词的开头或结尾$匹配字符串的结尾*重复零次或多次,重复一次或多次?重复零次或一次{n}重复n次{n,}重复n次或更多{n,m}重复n到m次*?重复尽可能多的次数,但越少越好?重复一次或多次,但尽可能少重复?重复0次或1次,但尽可能少重复{n,m}?重复n到m次,但重复{n,}?重复N次以上,但尽可能少重复\W匹配任何非字母、数字、下划线、中文字符的字符\S匹配任何非空白字符\D匹配任何非数字字符\B匹配任何非单词开头或结尾的位置[x]匹配除x以外的任何字符[aeiou]匹配除aeiou以外的任何字符Capture (exp) Match exp,Nameexp)匹配exp并将文本捕获到名为name的组中,该组也可以写成(?name'exp()?exp)匹配exp,不捕获匹配的文本,也不分配组号零宽度断言(?=exp)匹配exp(?=exp)匹配exp(?Exp)匹配一个后面没有exp(?Exp)匹配位置注释(?#comment)这种类型的分组对正则表达式的处理没有影响,用于提供注释供人们阅读
版权声明:nginx伪静态重写正则支撑支撑方案是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。


















