A reescrita de URL faz com que todos os links tenham os mesmos padrões depois de visitar qualquer link reescrito no ASP.NET
-
27-10-2019 - |
Pergunta
Estou usando UrlRewriter
para reescrever meus urls em um aplicativo ASP.NET.Tudo funciona bem e o trabalho que eu preciso fazer está funcionando bem.
Quero redirecionar ~/product/45/something
para ~/show_product_details.aspx?current_prod=45
e está funcionando bem.Mas o problema é que quando eu solicito ~/product/45/something
, estou obtendo a página de ~/show_product_details.aspx?current_prod=45
.Depois disso, quando clico em algum link como ~/home.aspx
, ele me redireciona novamente para ~/product/45/home.aspx
.
Por favor, sugira como corrigir isso.Estou usando esta regra:
<add name="Gallery1" virtualUrl="^~/product/(.*)/(.*)"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/show_product_details.aspx?current_prod=$1"
ignoreCase="true" />
Solução
Parece que os URLs em seu aplicativo ASP.NET não são resolvidos para a raiz do aplicativo, mas sim links relativos, fazendo com que a estrutura de pastas seja levada em consideração.
Se estiver usando ASP.NET Web Forms, você precisa ter certeza de chamar ResolveUrl ("~ / home.aspx") ao gerar o URL ou garantir que o hiperlink seja runat= server, por exemplo:
<a runat="server" href="~/home.aspx">Home</a>
OU:
<a href='<%# ResolveUrl("~/home.aspx") %>'>Home</a>
Outra maneira de resolver isso é ter uma referência de base em seu HTML, que informa ao navegador que TODOS os links da página devem ser enraizados no caminho especificado:
Na seção <head>
: <base href='http://www.yourwebsite.com/' />