一、问题背景
前端使用vue框架搭建单应用页面,生成的url地址类似http://www.example.com/test/index.html#/,将此地址传到Ios客户端后发现,由于客户端识别"#"为特殊字符,所以会转码为"%23"导致访问错误。
二、解决方案与选择
1.客户端将"#"的特殊字符处理去掉,缺点是无法兼容旧版本,只能保证新版本解决此问题
2.使用vue的history模式(官方文档:https://router.vuejs.org/zh-cn/essentials/history-mode.html),缺点是整体改动较大。
3.使用nginx的配置进行转发重定向
经过几种解决方式的比对,选择通过nginx进行url的重定向的处理方法:将客户端访问url修改为http://www.example.com/test/index.html/,重定向到http://www.example.com/test/index.html#/的目标地址。
三、nginx的location配置规则记录
location匹配的是nginx的$request_uri变量;
语法规则: location [=|~|~*|^~] /uri/ { … }
= 开头表示精确匹配
^~ 开头,注意这不是一个正则表达式--它的目的是优于正则表达式的匹配。如果该location是最佳匹配,则不再进行正则表达式检测。
~ 开头表示区分大小写的正则匹配;
~* 开头表示不区分大小写的正则匹配
/ 通用匹配, 如果没有其它匹配,任何请求都会匹配到
!~ && !~*:表示区分大小写不匹配的正则和不区分大小写的不匹配的正则
匹配顺序:
- "="前缀指令匹配,如果匹配成功,则停止其他匹配
- 普通字符串指令匹配,顺序是从长到短,匹配成功的location如果使用^~,则停止其他匹配(正则匹配)
- 正则表达式指令匹配,按照配置文件里的顺序,成功就停止其他匹配
- 如果第三步中有匹配成功,则使用该结果,否则使用第二步结果
常用参数说明
1.root:将请求映射到服务器文件上(定义+$uri)
例:配置root /var/www/html/example/
访问:http://www.example.com/test/index.html
实际访问文件为服务器上的 /var/www/html/example/test/index.html
2.alias:将请求映射到服务器文件上(定义)
例:配置alias /var/www/html/example/
访问:http://www.example.com/test/index.html
实际访问文件为服务器上的 /var/www/html/example/index.html
3.return:返回状态码
例:配置return 200;
访问直接返回状态码200,不经过任何文件(很直接的可以验证是否进入该模块)
4.rewrite:实现url重写以及重定向
未完待续。。