在项目中使用angularjs1.X,在微信内置浏览器中使用微信支付,授权目录配置总出现XXXXXX#/XXXXX.html/XXXX未注册,想了很多办法,最终解决了,现在记录一下
1、直接后台重定向
var pay ="http://127.0.0.1/XXXX/mobilePay?id="+$scope.id
window.location.href=pay;
mobilePay控制层实现重定向到你的支付页面response.sendRedirect("http://127.0.0.1/shopxx/mobile/index.html#/payment/"+id);
这个方法可以解决问题,但是微信ios版本的6.5.6不知为何有少部分人还是不能支付
2、去除angularjs1.X URL中#,重新配置授权目录,同时刷新也不会出现404
1)可以使用nginx
2)使用webServer转发
我们先修改 angularjs1项目,开启html5模式
app.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
$locationProvider.html5Mode(true);
}]);
编辑 index.html,增加base标签
<html ng-app="app">
<head>
<base href="/"> //目录请根据自己的实际项目配置,错误的时候不能正常加载js等文件
</head>
1)使用nginx
用到的是try_files,修改nginx的配置文件,增加try_files配置,因对nginx不怎么熟悉,本身服务器上配置了负载均衡等,不想再去修改配置文件(同样需要更具自己的项目修改路径),所以只再本地尝试了一下。
server {
server_name localhost;
root /;
location / {
try_files $uri $uri/ /index.html;
}
}
2)使用webServer转发
懒得自己写拦截器,网上搜了一下UrlRewriteFilter还不错
下载相应jar包并引入
在WEB-INF/web.xml配置文件中加入拦截器
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>//根据自己的项目修改,不是所有目录都需要拦截,不过全拦截也无所谓,转发规则文件配置中可以再去除
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
在WEB-INF新建“urlrewrite.xml”转发规则文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
"http://tuckey.org/res/dtds/urlrewrite3.0.dtd">
<urlrewrite>
<rule>
<from>mobile/[a-zA-Z]+(/([a-zA-Z]|[0-9])*)*$</from>//正则表达式,根据需求自己再改改
<to>/mobile/index.html</to>
</rule>
</urlrewrite>