Angularjs 在刷新页面时将用户重定向到startpage-使用重写规则iis

Angularjs 在刷新页面时将用户重定向到startpage-使用重写规则iis,angularjs,iis,url-rewriting,Angularjs,Iis,Url Rewriting,angularjs应用程序将在url上初始化 angularjs生成如下URL 当用户点击刷新按钮时,iis应将THNM重定向到 我创建了以下规则: <rewrite> <rules> <rule name="angularjs" stopProcessing="true"> <match url="#.*" /> <actio

angularjs应用程序将在url上初始化

angularjs生成如下URL

当用户点击刷新按钮时,iis应将THNM重定向到

我创建了以下规则:

   <rewrite>
        <rules>
            <rule name="angularjs" stopProcessing="true">
                <match url="#.*" />
                <action type="Redirect" url="http://ip.us/angularjs/" appendQueryString="true" />
            </rule>
        </rules>
    </rewrite>


模式有什么问题?

服务器只提供了标签前面的URL。这就是为什么在AngularJS中使用它来提供客户端路由。当你点击服务器时,只会看到。“#/link/”是一个供浏览器使用的“书签”(在本例中,使用AngularJS来决定要匹配的客户端路由)

因此,您在IIS上的匹配规则将永远不会触发。检查您的服务器日志,您应该看到来自#登录的路径信息没有显示在请求中。当然,我相信服务器端的设置正是您想要的。无论在#之后可能存在什么,它都始终在交付

所以,您想要进行的重写需要在客户端以角度进行处理——尽管我不确定您想要的是什么行为

如果你想重新加载到其他地方(即总是从“y/”开始),考虑在你的控制器中检查一个范围/根目录变量(或者将它抽象成一个服务以使它更干净)(W/O知道你的应用程序是如何安装的,我不能更具体),如果值为空,就转到你的基本角度路由。(因为重新加载会导致该值被重置)。然后,您只需在基本路由上将该值设置为true,从而强制所有人在重新加载后通过基本客户端路由


当然,要了解默认行为通常是人们想要的。如果有人在并点击“重新加载”,Angular应用程序的默认行为是它将从服务器重新加载(应该是你的Angular html,其中包含指向它所需的所有其他内容的链接),并且将匹配“#/link/”ngRoute或ui路由器映射中的路由/状态。

谢谢您的解释。当我刷新页面时,将加载完全相同的页面。我希望像您描述的那样进行操作。在刷新页面时,应该加载。请确保您清楚地知道,刷新时始终从服务器加载ip.us/angularjs/,即使我p、 us/angularjs/#/link在地址栏中。因此,我认为您想要的行为是,当您点击reload ip.us/angularjs/#/link时,您希望它以角度将客户端重定向到ip.us/angularjs/#/。这有意义吗?好的,所以服务器总是发送ip.us/angularjs/但是angular核心处理它,让用户获得正确的前一个pag是的,我想在刷新页面时重定向到ip.us/angularjs/#/#/。好的。所以,是的,我上面给出的描述适用。您需要以某种方式维护状态,以区分从#/到达#/链接的人和进行了干净刷新的人。您可以通过scope/rootScope变量或Ser来实现这一点反之,你也可以完全避免使用ngRoute/ui路由器,而只使用ng include来加载不更新URL的部分内容。在这种情况下,地址栏中根本不会有#/链接。执行#/任何操作的主要原因都是特别允许深度链接和重新加载,这正是你试图避免的。