Angular 2 azure部署刷新错误: The resource you are looking for has been removed,已更改名称,或暂时不可用

标签 angular azure angular2-routing

我有一个 Angular 2 rc-2 应用程序,实现了基本路由。路径是默认路径 /path1/path2。主路径 / 重定向到 /path1。当我在本地(lite-server)运行它时,一切正常。我设法将此应用程序部署到 Azure Web 应用程序。该应用程序工作正常,但如果我在 /path1/path2 中刷新页面,我会收到此错误:您正在查找的资源已被删除,已更名,或暂时不可用。

一种可能的方法是实现 url 重写。我在项目中添加了一个 web.config 文件

<?xml version="1.0" encoding="UTF-8"?>

<configuration>
    <system.webServer>
        <rewrite>
        <rules>
        <clear />

         <!-- check if its path1 url and navigate to default page -->
        <rule name="Path1 Request" enabled="true" stopProcessing="true">
        <match url="^path1" />
        <action type="Redirect" url="/index.html" logRewrittenUrl="true" />
        </rule>

         <!-- check if its path2 url and navigate to default page -->
        <rule name="Path2 Request" enabled="true" stopProcessing="true">
        <match url="^path2" />
        <action type="Redirect" url="/index.html" logRewrittenUrl="true" />
        </rule>

         </rules>
        </rewrite>
    </system.webServer>
</configuration>

在这种情况下,我可以进行刷新而不会收到此错误消息。但是任何刷新都会将我重定向到默认网址。我从 /path2 刷新,它会将我重定向到 /path1 (默认网址)。

有什么改进刷新的想法吗? :)

最佳答案

您必须将 web.config 文件添加到您的根 Angular2 应用程序中。这就是 Azure 服务器(IIS 服务器)的工作原理。

我使用 webpack,所以我把它放在 src 文件夹中。部署时不要忘记将其复制到您的 dist 文件夹中。我使用 CopyWebpackPlugin 设置我的 webpack 来复制它。

这是 web.config 文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <clear />
                <rule name="Redirect to https" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{HTTPS}" pattern="off" ignoreCase="true" />
                    </conditions>
                    <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
                </rule>
                <rule name="AngularJS Routes" stopProcessing="true">
                    <match url=".*" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="/" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

它有 2 条规则:

第一条规则是将所有调用重定向到 https。如果您不使用 https,请将其删除。

第二条规则是解决你的问题。我在这里得到了第二条规则的引用(感谢来自www.reddit.com的用户gravityaddiction):

https://www.reddit.com/r/Angular2/comments/4sl719/moving_an_angular_2_app_to_a_real_server/

关于Angular 2 azure部署刷新错误: The resource you are looking for has been removed,已更改名称,或暂时不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38054707/

相关文章:

azure - azurerm_linux_virtual_machine 中的云初始化脚本中的错误处理

angular - 是否建议客户端路由与服务器端路由一起提供 angular-universal

angular - 如何以 Angular 方式在 CustomReuseStrategy 中注入(inject)服务?

angular - 部署Azure Web App(Angular)不起作用

angular - 在 View 中使用@input Observable 但组件中的管道函数被忽略

Angular 2 表格呈现缓慢

c# - 如何手动使用 azure 表类对象的列名称?

azure - 如何通过 Terraform 部署状态为 'connected' 的 Azure API 连接

post - 在 Angular2 中读取请求正文

javascript - 在 Angular 2 应用程序中成功登录后重定向到子域