Porównaj ceny domen i usług IT, sprzedawców z całego świata

Błąd aktualizacji wdrożenia angular 2 Azure: zasób, którego szukasz, został usunięty, jego nazwa uległa zmianie lub jest tymczasowo niedostępny.


Mam aplikację rc-2 Angular 2 z zaimplementowanym podstawowym routingiem. Ścieżki to
/ path1
, która jest ścieżką domyślną, oraz
/ path2
. Ścieżka główna
/
przekierowuje do
/ path1
. Kiedy uruchamiam go lokalnie (serwer lite) wszystko działa dobrze. Udało mi się wdrożyć tę aplikację w aplikacji internetowej platformy Azure. Aplikacja działa dobrze, ale jeśli odświeżę stronę, gdy jestem w
/ path1
lub
/ path2
, pojawia się ten błąd:
Zasób, którego szukasz, został usunięto, zmieniono jego nazwę lub jest tymczasowo niedostępny.
Możliwym podejściem jest zaimplementowanie przepisywania adresu URL. Dodałem plik web.config do mojego projektu
<?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>

W takim przypadku mogę przeprowadzić aktualizację bez otrzymywania tego komunikatu o błędzie. Ale każda aktualizacja przekierowuje mnie do domyślnego adresu URL. Aktualizuję z
/ path2
i przekierowuje mnie do
/ path1
(domyślny adres URL)
.
Jakieś przemyślenia, jak ulepszyć aktualizację? :)
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Prostsza wersja metody @Guilherme Teuble. To zadziałało idealnie dla mnie.
<?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>
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli ktoś jeszcze na tym utknął, chciałbym dodać dwie rzeczy.
  • dodaj plik web.config do folderu src. W moim przypadku obecność web.config nie rozwiązał zasadniczo problemu.
  • Dodaj go do swojego
    .angular-cli.json
    w ten sposób
    "apps": [ { "root": "src", "outDir": "dist", "assets": [ "assets", "favicon.ico", "web.config" ], ... } ],
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W nowej wersji kątowej dodaj ścieżkę konfiguracji do angular.json, a ponieważ angular.json znajduje się w folderze aplikacji, pamiętaj, aby dodać go za pomocą src/web.config
"assets": [
"src/assets",
"src/web.config"
],
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Musisz dodać


web.config do głównej aplikacji Angular2. Tak działają serwery Azure (serwery IIS).
Używam webpacka, więc umieściłem go w folderze

src
... Nie zapomnij skopiować go do folderu

dist

podczas wdrażania. użyłem

CopyWebpackPlugin

aby skonfigurować pakiet internetowy, aby go skopiować.
To jest plik 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>

Ma 2 zasady:

Pierwsza zasada to przekierowanie wszystkich wywołań na https. Usuń go, jeśli nie używasz protokołu HTTPS.
Druga zasada to rozwiązanie problemu. Mam tutaj link do drugiej reguły (podziękowania dla użytkownika

gravityaddiction

z www.reddit.com):
https://www.reddit.com/r/ Angular2/comments/4sl719/Moving_an_angular_2_app_to_a_real_server
https://www.reddit.com/r/Angul ... rver/
/
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Napotkałem również ten problem i obejść ten błąd za pomocą następującego kodu:
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 { }

Możesz przeczytać więcej o HashLocationStrategy tutaj:

https://angular.io/docs/ts/lat ... .html
https://angular.io/docs/ts/lat ... .html
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wystąpił problem polegający na tym, że mój plik
angular.json
został poprawnie skonfigurowany z:
"assets": [
"src/assets",
"src/web.config"
],

ale plik
web.config
nie został skopiowany do osadzonego folderu
dist/
.
Nie sądziłem, że używam również niestandardowego pliku konfiguracyjnego pakietu internetowego (
extra-webpack.config.js
) z wtyczką
CopyPlugin
. Po dodaniu ścieżki
web.config
do mojej niestandardowej konfiguracji pakietu webpack i przebudowie projektu znajdował się tam plik
web.config
!

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się