Eu tenho o projeto de semente AngularJS e adicionei
$locationProvider.html5Mode(true).hashPrefix('!');
para o arquivo app.js. Quero configurar o IIS 7 para rotear todas as solicitações para
http://localhost/app/index.html
para que isso funcione para mim. Como eu faço isso?
Atualizar:
Acabei de descobrir, fazer o download e instalar o módulo IIS Rewrite URL , esperando que isso torne fácil e óbvio alcançar meu objetivo.
Atualização 2 :
Eu acho que isso resume o que estou tentando alcançar (extraído da documentação do AngularJS Developer ):
O uso desse modo requer a reescrita de URL no servidor, basicamente você precisa reescrever todos os seus links no ponto de entrada do seu aplicativo (por exemplo, index.html)
Atualização 3:
Ainda estou trabalhando nisso e sei que NÃO preciso redirecionar (ter regras que reescrevam) certos URLs, como
http://localhost/app/lib/angular/angular.js
http://localhost/app/partials/partial1.html
portanto, qualquer coisa que esteja nos diretórios css, js, lib ou parcials não é redirecionada. Todo o resto precisará ser redirecionado para app / index.html
Alguém sabe como conseguir isso facilmente, sem precisar adicionar uma regra para cada arquivo?
Atualização 4:
Eu tenho duas regras de entrada definidas no módulo IIS Rewrite URL. A primeira regra é:
A segunda regra é:
Agora, quando eu navego para localhost / app / view1, ele carrega a página, mas os arquivos de suporte (os diretórios css, js, lib e parcials) também estão sendo reescritos na página app / index.html - para que tudo esteja chegando de volta como a página index.html, independentemente do URL usado. Eu acho que isso significa que minha primeira regra, que deve impedir que esses URLs sejam processados pela segunda regra, não está funcionando ... alguma idéia? ...qualquer um? ...Eu me sinto tão sozinho... :-(
fonte
app/index.html
e nãoapp/
acionar explicitamente a página que serve o AngularJS. eu perdi 2 horas da minha vida antes de descobrir. :-)Respostas:
Escrevo uma regra no web.config depois de
$locationProvider.html5Mode(true)
configuradaapp.js
.Espero que ajude alguém.
No meu index.html, adicionei isso ao
<head>
Não se esqueça de instalar o IIS URL Rewrite no servidor.
Além disso, se você usar a API da Web e o IIS, isso funcionará se sua API estiver
www.yourdomain.com/api
devido à terceira entrada (terceira linha de condição).fonte
As regras de entrada do IIS, conforme mostrado na pergunta, funcionam. Eu tive que limpar o cache do navegador e adicionar a seguinte linha na parte superior da minha
<head>
seção da página index.html:Isso ocorre porque eu tenho mais de um aplicativo no host local e, portanto, solicitações para outras parciais estavam sendo encaminhadas para, em
localhost/app/view1
vez delocalhost/myApplication/app/view1
Espero que isso ajude alguém!
fonte
No meu caso, continuei recebendo 403.14 depois de configurar as regras de reescrita corretas. Acontece que eu tinha um diretório com o mesmo nome de uma das minhas rotas de URL. Depois que removi a regra de reescrita do IsDirectory, minhas rotas funcionaram corretamente. Existe um caso em que a remoção da negação de diretório pode causar problemas? Não consigo pensar em nada no meu caso. O único caso em que consigo pensar é se você pode procurar um diretório com seu aplicativo.
fonte
O problema de ter apenas essas duas condições:
é que eles funcionam apenas enquanto
{REQUEST_FILENAME}
existir fisicamente no disco . Isso significa que pode haver cenários em que uma solicitação para uma exibição parcial nomeada incorretamente retorne a página raiz em vez de uma 404, o que causaria o carregamento angular duas vezes (e em certos cenários, pode causar um loop infinito desagradável).Portanto, algumas regras seguras de "fallback" seriam recomendadas para evitar essas questões difíceis de solucionar:
ou uma condição que corresponda a qualquer arquivo que termina :
fonte
A maneira mais fácil que encontrei é apenas redirecionar as solicitações que acionam 404 para o cliente. Isso é feito adicionando uma hashtag mesmo quando
$locationProvider.html5Mode(true)
está definido.Esse truque funciona para ambientes com mais aplicativos da Web no mesmo site e exigindo restrições de integridade da URL (autenticação externa do EG). Aqui está passo a passo como fazer
index.html
Defina o
<base>
elemento corretamenteweb.config
Primeiro redirecione 404 para uma página personalizada, por exemplo "Página inicial / erro"
Controlador residencial
Implemente uma entrada simples
ActionResult
para "traduzir" em uma rota do lado do cliente.Esta é a maneira mais simples.
É possível (aconselhável?) Aprimorar a função Erro com alguma lógica aprimorada para redirecionar 404 para o cliente apenas quando a URL é válida e deixar o 404 disparar normalmente quando nada for encontrado no cliente. Digamos que você tenha essas rotas angulares
Faz sentido redirecionar o URL para o cliente apenas quando ele começa com "/ New" ou "/ Show /"
Este é apenas um exemplo de lógica aprimorada, é claro que todo aplicativo da Web tem necessidades diferentes
fonte
Eu tenho tentado implantar um aplicativo Angular 7 simples, em um Azure Web App. Tudo funcionou bem, até o ponto em que você atualizou a página. Ao fazer isso, estava me apresentando um conteúdo movido por 500 erros. Eu li nos documentos do Angular e em alguns fóruns, que preciso adicionar um arquivo web.config à minha solução implantada e garantir que a regra de reescrita seja substituta no arquivo index.html. Após horas de frustração e testes de tentativa e erro, descobri que o erro era bastante simples: adicionar uma marca à minha marcação de arquivo.
fonte
Eu tive um problema semelhante com o Angular e o IIS lançando um código de status 404 na atualização manual e tentei a solução mais votada, mas isso não funcionou para mim. Também tentei várias outras soluções que precisavam lidar com o WebDAV e alterar manipuladores e nenhuma funcionou.
Felizmente eu encontrei esta solução e funcionou (tirei as peças que não precisava). Portanto, se nenhuma das opções acima funcionar para você ou mesmo antes de experimentá-las, tente isso e veja se isso corrige sua implantação angular no problema do iis.
Adicione o snippet ao seu webconfig no diretório raiz do seu site. Pelo que entendi, ele remove o código de status 404 de qualquer herança (applicationhost.config, machine.config), depois cria um código de status 404 no nível do site e redireciona de volta para a home page como uma página 404 personalizada.
fonte