angular 2 azure deploy refresh error:您正在查找的资源已被移除,已更改名称,或暂时不可用

h9a6wy2h  于 2023-03-31  发布在  Angular
关注(0)|答案(8)|浏览(184)

我有一个Angular 2 rc-2应用程序,实现了基本路由。路径是/path1,这是默认路径和/path2。主路径/重定向到/path1。当我在本地运行它时(lite-server)一切正常。我设法将此应用程序部署到Azure Web应用程序。该应用程序工作正常,但如果我刷新页面时,我在/path1/path2我得到这个错误:The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
一种可能的方法是实现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>

在这种情况下,我可以进行刷新而不会收到此错误消息。但任何刷新都会将我重定向到默认url。我从/path2刷新,它会将我重定向到/path1(默认url)。
有什么想法可以改进刷新吗?:)

pgky5nke

pgky5nke1#

你必须将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>

它有两个规则:
第一条规则是将所有调用重定向到https。如果您不使用https,请删除它。
第二条规则是解决你的问题。我在这里得到了第二条规则的参考(感谢用户gravityaddiction来自www.reddit.com):
https://www.reddit.com/r/Angular2/comments/4sl719/moving_an_angular_2_app_to_a_real_server/

q9yhzks0

q9yhzks02#

@Guilherme Teubl方法的一个简单版本。这对我来说非常有效。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Angular4" 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>
mutmk8jj

mutmk8jj3#

如果有人还在坚持这一点,我想补充两点。
1.将web.config添加到您的src文件夹。在我的情况下,将web.config放在根目录并没有解决这个问题。
1.将其添加到您的.angular-cli.json中,如下所示
"apps": [ { "root": "src", "outDir": "dist", "assets": [ "assets", "favicon.ico", "web.config" ], ... } ],

falq053o

falq053o4#

在新版本的angular中,将配置路径添加到angular.json,因为angular.json在app文件夹中,所以一定要使用src/web.config添加它

"assets": [
          "src/assets",
          "src/web.config"
        ],
kxe2p93d

kxe2p93d5#

我也遇到了这个问题,并通过使用以下代码解决了这个错误:

import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser'; 
import { FormsModule }   from '@angular/forms';
import { AppComponent }  from './app.component';
import { routing }       from './app.routes';
import {AgmCoreModule} from 'angular2-google-maps/core';
import { LocationStrategy, HashLocationStrategy } from '@angular/common';

@NgModule({
  imports: [ BrowserModule, FormsModule, routing, AgmCoreModule.forRoot() ],
  declarations: [ AppComponent ],
  bootstrap: [ AppComponent ],
  providers: [{provide: LocationStrategy, useClass: HashLocationStrategy}]
})

export class AppModule { }

您可以在这里了解更多关于HashLocationStrategy的信息:https://angular.io/docs/ts/latest/api/common/index/HashLocationStrategy-class.html

xesrikrc

xesrikrc6#

对于Azure Web应用程序上的Angular 10
在assets目录中创建了web.config(以防止pwd错误),并将其替换添加到angular.json构建版本中

assets:
  "assets": [
              "src/favicon.ico",
              "src/assets",
              **{
                "glob": "web.config",
                "input": "src/assets/",
                "output": "/"
              }**
              
            ],

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

khbbv19g7#

我有这个问题时,用户点击导航栏
已将〈ahref="....替换为〈a路由器链接="...

ghhkc1vu

ghhkc1vu8#

我遇到了一个问题,我有我的angular.json文件设置正确:

"assets": [
    "src/assets",
    "src/web.config"
],

但是web.config文件没有被复制到构建的dist/文件夹中。
我没有想到我还使用了一个自定义的webpack配置文件(extra-webpack.config.js)和一个CopyPlugin插件。一旦我将web.config路径添加到我的自定义webpack配置并重新构建我的项目,web.config文件就在那里了!

相关问题