搜索
简帛阁>技术文章>php,nginx配置重定向,rewrite

php,nginx配置重定向,rewrite

需求,将http://localhost:80/index/abc    rewrite为http://localhost:80/aaa.php/abc

访问网站时只输入http://localhost:80/index/abc

经过nginx rewrite后,

重定访问路径为:http://localhost:80/abc.php/abc

rewrite指令的功能就是,使用nginx提供的全局变量或自己设置的变量,然后结合正则表达式和标志位实现url重写以及重定向。rewrite指令只能放在server、location或if中,并且只能对域名后边的除去传递的参数外的字符串起作用,例如 http://ywnds.com/a/we/index.php?id=1&u=str,只对/a/we/index.php重写。

如果想对域名或参数字符串起作用,可以使用全局变量匹配,也可以使用proxy_pass反向代理。

nginx代码如下:

location /{

  if(!-e $reqquest_filename){
    #1
    rewrite ^/index/(.*)$ /abc.php?s=/$1 last;
    #2
    rewrite ^/abc.php(.*)$ /abc.php?s=/$1 last;
    #3
    rewrite ^(.*) /abc.php?s=/$1 last;
    break;
  }

}

-e

1. 当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false;

2. 使用“=”和“!=”比较一个变量和字符串;

3. 使用“~”做正则表达式匹配,“~*”做不区分大小写的正则匹配,“!~”做区分大小写的正则不匹配;

4. 使用“-f”和“!-f” 检查一个文件是否存在;

5. 使用“-d”和“!-d”检查一个目录是否存在;

6. 使用“-e”和“!-e”检查一个文件、目录、符号链接是否存在;

7. 使用“-x”和“ !-x”检查一个文件是否可执行;

$request_filename

$args               #这个变量等于请求行中的参数,同$query_string;

$content_length     #请求头中的Content-length字段;

$content_type       #请求头中的Content-Type字段;

$document_root      #当前请求在root指令中指定的值,如:root /var/www/html;

$host               #请求主机头字段,否则为服务器名称;

$http_user_agent    #客户端agent信息;

$http_cookie        #客户端cookie信息;

$limit_rate         #这个变量可以限制连接速率;

$request_method     #客户端请求的动作,通常为GET或POST;

$remote_addr        #客户端的IP地址;

$remote_port        #客户端的端口;

$remote_user        #已经经过Auth Basic Module验证的用户名;

$request_filename   #当前请求的文件路径,由root或alias指令与URI请求生成;

$scheme             #HTTP方法(如http,https);

$server_protocol    #请求使用的协议,通常是HTTP/1.0或HTTP/1.1;

$server_addr        #服务器地址,在完成一次系统调用后可以确定这个值;

$server_name        #服务器名称;

$server_port        #请求到达服务器的端口号;

$request_uri        #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”;

$uri                #不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”;

$document_uri       #与$uri相同,例:http://localhost:88/test1/test2/test.php;

rewrite

重写规则组成部分

如图所示包括3部分。每一部分这间用空格分开。

第一部分:任何重写规则的第一部分都是一个正则表达式

正则表达式可以使用括号来捕获,后续可以根据位置来将其引用,位置变量值取决于捕获正则表达式中的顺序,$1引用第一个括号中的值,$2引用第二个括号中的值,以此类推。如:

^/images/([a-z]{2})/([a-z0-9]{5})/(.*)\.(png|jpg|gif)$

$1是两个小写字母组成的字符串,$2是由小写字母和0到9的数字组成的5个字符的字符串,$3将是个文件名,$4是png、jpg、gif中的其中一个。

第二部分:重写规则的第二部分是URI

当重写规则第一部分被匹配到了之后,则请求被改写,那么该URI可能包含正则表达式中的捕获的位置参数或这个级别下的nginx任何配置变量。如:

/data?file=$3.$4

如果这个URI不匹配nginx配置的任何location,那么将给客户端返回301(永久重定向)或302(临时重定向)的状态码来表示重定向类型。该状态码可以通过第三个参数来明确指定。

第三部分:重写规则的第三部分就是标记(flag)

第三部分也就是尾部的标记(flag), last标记将导致重写后的URI搜索匹配nginx的其他location,最多可循环10次。如:

rewrite '^/images/([a-z]{2})/([a-z0-9]{5})/(.*)\.(png|jpg|gif)$' /data?file=$3.$4 last;

在rewrite中,如果使用小括号(),那么在小括号之间匹配的内容,可以在后面通过$1来引用,$2表示的是前面第二个()里的内容,后面会说到。

第3行

将所有不带abc.php的网址,都在开头加上abc.php.其中(.*)表示匹配到的所有的字符,第二部分的/abc.php?s=/$1表示将以此网址进行访问,即在(.*)匹配到的字符前面加上abc.php?s=/

带#的不再加abc.php

rewrite ^/#/(.*)& /#/$1 last;

发送captcha

rewrite ^/captcha /abc.php/captcha.* last;

需求,将http://localhost:80/index/abcrewrite为http://localhost:80/aaaphp/abc访问网站时只输入http://localhost:80/i
,将wwwmywebcom/connect跳转到connectmywebcomrewrite^/connect$http://connectmywebcompermanent;rewrite^/co
1ApacheRewrite的主要功能就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则表达式规范。平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等2ApacheRewrite的配置Apa
目录一简介二配置访问a页面定向到b页面访问当前nginx定向到其他网址一简介据相关变量定向和选择不同的配置,从一个location跳转到另一个location,不过这样的循环最多可以执行10
前言环境:centos79nginx18当我们访问一个地址如:http://wwwbaiducom/,你会发现地址变成了:https://wwwbaiducom/,由http变成了https,类似的
开发网站时,一般情况下都会将带www的网址访问时默认跳转到不带www的,或者将不带www的跳转到带www的,比如输入xxxxcom服务器收到请求后告诉浏览器页面被移到wwwxxxxcom了,然后浏览器
在/usr/local/nginx/conf/nginxconf中:server{beginaddbyguozhenbin20100727location/b2c/{if(!e$request_fi
apache开启定向rewrite的实现方法1开启定向模块$lns/etc/apache2/modsavailable/rewriteload/etc/apache2/modsenable/re
上周末兄弟项目准备扩展服务器以便提供更好的服务,兄弟项目有一些功能是实时提供到我这边的,需要我这边暂时把对应系统功能屏蔽,因为使用nginx,所以可以直接配置nginx定向到固定系统维护页面。ngi
详解Nginx301定向配置301定向是很常见的需求,比如访问nowamagicnet,自动跳到wwwnowamagicnet。或者倒过来,访问wwwnowamagicnet跳到nowamagi