我有一个Angular 2 rc-2应用程序,实现了基本路由.路径为/path1(默认路径)和/path2.主路径/重定向到/path1.当我在本地运行它(lite服务器)时,一切正常.我成功地将此应用程序部署到Azure web应用程序.该应用程序工作正常,但如果我在/path1/path2刷新页面,我会得到这个错误:The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

一种可能的方法是实现url重写.我添加了一个网页.我的项目中的配置文件

<?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>

在这种情况下,我可以在没有收到此错误消息的情况下进行刷新.但任何刷新都会将我重定向到默认url.我从/path2刷新,它将我重定向到/path1(默认url).

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

推荐答案

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

我正在使用webpack,所以我把它放在src文件夹中.当你解除部署时,别忘了把它复制到你的dist文件夹.我用CopyWebpackPlugin设置我的网页来复制它.

这是网络.配置文件:

<?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>

它有两条规则:

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

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

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

Angular相关问答推荐

Angulat 17@ngrx/Signals或全球服务,用什么?

not getting circular input switch primeng组件

运行容器后,Docker容器立即退出

元件不工作时的Angular 17属性 Select 器

如何在HTML外部项目中使用Web组件(以17角创建)

更改图表上的光标以进行zoom

Swiper 11角17 SSR Swiper断点不工作

更改物料设计中的复选框勾选 colored颜色

PrimeNg选项卡视图选项卡

是否自动处理Angular /RxJS观测数据的取消订阅

对Angular 为17的路径使用AuthGuard

P-DropDown不会使用react 式表单手动设置Value

如何处理Angular 延迟订阅

有条件地取消所有内部可观察对象或切换到仅发出一个值的新对象

Angular 2 中的 OnChanges 和 DoCheck 有什么区别?

Angular 2 组件不是任何 NgModule 的一部分

在Angular2中获取服务的域名

Angular:找不到不同的支持对象[object Object]

包 '@angular/cli' 不是依赖项

Angular 2 中的动态模板 URL