angularjs app将在网址http://ip.us/angularjs/
上初始化angularjs生成像
这样的网址http://ip.us/angularjs/#/link/ http://ip.us/angularjs/#/link/link
当用户点击刷新按钮时,iis应该重定向到 http://ip.us/angularjs/
我创建了以下规则:
<rewrite>
<rules>
<rule name="angularjs" stopProcessing="true">
<match url="#.*" />
<action type="Redirect" url="http://ip.us/angularjs/" appendQueryString="true" />
</rule>
</rules>
</rewrite>
但似乎在例如http://ip.us/angularjs/#/link/上会被忽略 这个模式怎么了?
答案 0 :(得分:1)
服务器仅在主题标签之前提供URL。这就是它在AngularJS中用于提供客户端路由的原因。当您点击http://ip.us/angularjs/#/link/时,服务器只会看到http://ip.us/angularjs/。 “#/ link /”是浏览器使用的“书签”(或者在这种情况下,AngularJS用于决定要匹配的客户端路由)。
因此,IIS上的匹配规则永远不会触发。检查您的服务器日志,您应该看到#符号中的路径信息未显示在请求中。当然,我相信你的设置的服务器端正在做你想要的。无论#。
之后可能存在什么,它总是提供http://ip.us/angularjs/所以,你想要做的重写需要在Angular中处理客户端 - 虽然我不确定你想要的行为。
如果您希望重新加载到其他地方(即始终以“#/”开头),请考虑在其中一个控制器中检查范围/ rootScope变量(或将其抽象为服务以使其更清晰)(w / o知道你的应用程序是如何设置的,我不能更具体),如果值为null,则转到基本角度路径(因为重新加载会导致重置此值)。然后,您只需在基本路由中将该值设置为true - 因此在重新加载后强制每个人都通过基本客户端路由。
当然,要了解默认行为通常是人们想要的。如果有人在http://ip.us/angularjs/#/link/并且重新加载,则Angular应用程序的默认行为是它将从服务器重新加载http://ip.us/angularjs/(应该是您的Angular html,其中包含指向其所需的所有其他内容的链接)并将匹配ngRoute或ui-router映射中的“#/ link /”路由/状态。