本文共 1502 字,大约阅读时间需要 5 分钟。
问题的描述:
报错截图:
登录按钮截图:登录链接:
点击“登录”,浏览器地址栏地址变成:
#
分析问题:
看起来是跳转问题,
思路:
考虑到nginx的rewrite可能可以解决这个问题
nginx配置文件中参数:
正则表达式匹配,其中:* ~ 为区分大小写匹配* ~* 为不区分大小写匹配* !~和!~*分别为区分大小写不匹配及不区分大小写不匹配文件及目录匹配,其中:* -f和!-f用来判断是否存在文件* -d和!-d用来判断是否存在目录* -e和!-e用来判断是否存在文件或目录* -x和!-x用来判断文件是否可执行flag标记有:* last 相当于Apache里的[L]标记,表示完成rewrite* break 终止匹配, 不再匹配后面的规则* redirect 返回302临时重定向 地址栏会显示跳转后的地址* 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,可能和最初的值有不同,比如经过重定向之类的。
$args是当前url问号后面的部分,相当于$query_string$arg_id是id的值,格式为$arg_rewrite是url重写命令permanent代表的是返回301永久重定向状态码$host为当前网站的域名部分结尾的问号代表不会将url后面的参数一起带过去^和$是代表的是正则匹配注意:nginx中if命令不能嵌套,不能有多条件if条件中的等号只有一个注意if的空格问题if条件中可以有多条url重写语句重定向是基于文件的,示例中是适用于commenceLogin?from=%2FsecurityRealm%2FloggedOut的结构
检查和重载nginx配置
nginx -tnginx -s reload
点击“登录”,链接重定向:
#
curl检查:
问题解决
转载于:https://blog.51cto.com/m51cto/2073204