redirect重定向中可以带参数吗_之前在nginx配置rewrite重写中遇到的坑

0ee8da0f46c4d3a813ec7e7e69d6d1e8.png

98ce4c1dad812fb8099831ba094a88ab.png

正则表达式匹配,其中:

* ~ 为区分大小写匹配

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

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

文件及目录匹配,其中:

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

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

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

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

flag标记有:

  1. * last 相当于Apache里的[L]标记,表示完成rewrite
  2. * break 终止匹配, 不再匹配后面的规则
  3. * redirect 返回302临时重定向 地址栏会显示跳转后的地址
  4. * permanent 返回301永久重定向 地址栏会显示跳转后的地址

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

$args, 请求中的参数;$content_length, HTTP请求信息里的"Content-Length";$content_type, 请求信息里的"Content-Type";$document_root, 针对当前请求的根路径设置值;$document_uri, 与$uri相同;$host, 请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名;$limit_rate, 对连接速率的限制;$request_method, 请求的方法,比如"GET"、"POST"等;$remote_addr, 客户端地址;$remote_port, 客户端端口号;$remote_user, 客户端用户名,认证用;$request_filename, 当前请求的文件路径名$request_body_file$request_uri, 请求的URI,带查询字符串;$query_string, 与$args相同;$scheme, 所用的协议,比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com$1 redirect;$server_protocol, 请求的协议版本,"HTTP/1.0"或"HTTP/1.1";$server_addr, 服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(造成资源浪费);$server_name, 请求到达的服务器名;$server_port, 请求到达的服务器端口号;$uri, 请求的URI,可能和最初的值有不同,比如经过重定向之类的。

rewrite 指令:可以使用在 server, location, if 区域;

语法:rewrite regex replacement flag

按照相关的正则表达式与字符串修改URI,指令按照在配置文件中出现的顺序执行。

可以在重写指令后面添加标记。

如果替换的字符串以http://开头,请求将被重定向,并且不再执行多余的rewrite指令。

尾部的标记(flag)可以是以下的值:

  • last - 完成重写指令,之后搜索相应的URI或location。
  • break - 完成重写指令。
  • redirect - 返回302临时重定向,如果替换字段用http://开头则被使用。
  • permanent - 返回301永久重定向。

注 意如果一个重定向是相对的(没有主机名部分),nginx将在重定向的过程中使用匹配server_name指令的“Host”头或者 server_name指令指定的第一个名称,如果头不匹配或不存在,如果没有设置server_name,将使用本地主机名,如果你总是想让nginx 使用“Host”头,可以在server_name使用“*”通配符(查看http核心模块中的server_name)。例如:

rewrite ^(/download/.*)/media/(.*)..*$ $1/mp3/$2.mp3 last;rewrite ^(/download/.*)/audio/(.*)..*$ $1/mp3/$2.ra last;return 403;

但是如果我们将其放入一个名为/download/的location中,则需要将last标记改为break,否则nginx将执行10次循环并返回500错误。

特别注意,例如访问带detail/41.html,实际访问的是detail?id=41。

location / {

if (!-e $request_filename) {

rewrite ^/hpc/(.*)/([0-9]*).html$ /hpc/$1?id=$2? last;

rewrite ^/fanan/(.*)/([0-9]*).html$ /fanan/$1?id=$2? last;

rewrite ^/(.*)$ /index.php/$1 last;//所有页面的重写

break;

}

}

开始我把rewrite ^/fanan/(.*)/([0-9]*).html$ /fanan/$1?id=$2? last;放到了 rewrite ^/(.*)$ /index.php/$1 last;后面怎么都不起作用,放到前面测试了一下没有问题。终于解决了。我只想说我屮艸芔茻。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值