Pergunta

Temos redesenhado a estrutura para um site que tem várias unidades de negócios. Agora eu quero redirecionar (301) para a nova página.

IE:
WAS www.example.com/abc
agora www.example.com/default.aspx?article=abc

Eu tentei usar Global.asax para fazer isso, e ele funciona corretamente quando eu depurar através dela.

        if (Request.RawUrl.Contains("abc"))
        {
            Response.RedirectLocation = "/default.aspx?article=abc";
            Response.StatusCode = 301;
            Response.StatusDescription = "Moved";
            Response.End();
        }

Assim http: // localhost: 1234 / example / abc redirecionamentos corretamente, mas (onde 1234 é a porta para o servidor de depuração)
http:. // localhost / example / abc não redirecionar, dá-me a 404

Todas as idéias?


Informações adicionais: Se eu for para http: //localhost/example/abc/default.aspx então ele redireciona corretamente.

Foi útil?

Solução

Bem, se a porta indica que você está usando o built-in servidor web (o que vem com o VS), isso provavelmente funciona porque que sempre As rotas solicitações através do framework ASP.NET.

Os pedidos terminando com / abc não será automaticamente rota através do framework ASP.NET porque o IIS pode não "sabe" que você quer que eles. Você precisa verificar suas IIS configurações para certificar-se de tais pedidos são encaminhados para o aspnet_isapi.dll


EDIT: Para conseguir isso, você precisa adicionar um curinga mapeamento :

  1. No Gerenciador do IIS, expanda o computador local, expanda a pasta Web Sites, clique com o botão direito do mouse no site ou diretório virtual que você deseja e clique em Propriedades.
  2. Clique na guia apropriada:. InicialAnuário, Virtual Directory, ou Diretório
  3. Na área de configurações do aplicativo, clique em configuração e, em seguida, clique na guia Mapeamentos.
  4. Para instalar um mapa de aplicativo curinga, faça o seguinte:
    • Na guia Mapeamentos, clique em Adicionar ou Inserir.
    • Digite o caminho para a DLL na caixa de texto executável ou clique em Procurar para navegar até ele (por exemplo, a dll ASP.NET 2.0 está em c: \ windows \ microsoft.net \ Framework \ v2.0.50727 \ aspnet_isapi. dll na minha máquina)
    • Para extensão, use "*" sem aspas, é claro
    • Selecionar quais verbos que você quer procurar (GET, HEAD, POST, DEBUG são o habitual para ASP.NET, você decide)
    • Certifique-se de "mecanismo de script" ou "motor de Aplicação" é selecionado
    • Desmarque a opção "Verificar esse arquivo existe"
    • Clique em OK.

I podem estar fora sobre isso, mas se eu sou, espero que alguém vai me corrigir. :)

Outras dicas

Você deve usar o redirecionamento wild card IIS, você vai precisar de algo assim;

 *; www.example.com/*; www.example.com/default.aspx?article=$0

Há uma referência razoável em Microsoft

Se você estiver usando Apache Eu acho que você precisa modificar o arquivo .htaccess.

Você está atualmente testando o site no servidor web Visual Studio? Que geralmente é executado o site em "localhost: nnnnn". Onde "nnnnn" é um número de porta (como acima é 1234), não configurá-lo para executar sem um

Se você tem o IIS instalado na máquina em causa, publicar seu projeto a ele e você deve ser capaz de verificar se ele funciona sem o "nnnnn" como há não parece ser qualquer coisa em seu código que causaria -lo para não fazê-lo.

Você já fez com que os arquivos web.config são as mesmas para cada site (assumindo: 1234 é diferente: 80)

Além disso, você já tentou localhost: 80

O http: // localhost / example / abc é não invocando o Global.asax como você espera. Tipicamente http: // localhost é executado na porta 80 (: 80). Se você deseja executar o seu site na porta 80 será necessário implantar seu site no IIS para executar aqui.

Você precisa configurar um mapeamento de manipulador no IIS para encaminhar todas as extensões desconhecidas para asp.net. Os primeiros um funciona porque a Cassini está a lidar com todos os pedidos, o segundo não funciona porque o IIS está olhando para esse diretório, e que não existe, em vez do .NET Framework executando o código que você tem.

Aqui está informações sobre como fazer reescrita de URL em asp.net .

Se possível, porém, eu sugiro usar o novo Aplicação pedido de encaminhamento ou < a href = "http://www.urlrewriting.net/149/en/home.html" rel = "nofollow noreferrer"> UrlRewrite.net

IIS, por padrão, não entregar todos os pedidos até ASP.NET para a manipulação. Apenas algumas extensões de recursos, entre eles "aspx" será passado para asp.net para lidar. O que está acontecendo quando você solicitar http: // localhost / example / abc é que o IIS tenta localizar o diretório para ver se você tem um arquivo padrão (ou seja default.aspx, index.html) para carregar a partir desse diretório. Uma vez que não é possível encontrar o diretório com o lixo tag "abc" nele, ele nunca encontra o arquivo default.aspx para carga.

Quando você tenta carregar http: //localhost/example/abc/default.aspx , o IIS vê a extensão "aspx" e imediatamente mãos-o para o tempo de execução ASP.NET para a manipulação. A razão que a http: // localhost / example / abc pedido não carrega é que ele nunca fica handed para ASP.NET, então é claro que o global.asax nunca vê-lo.

A Cassini hospedado alças do site todos os pedidos, assim que a chamada não se tratado pelo ASP.NET e o arquivo global.

Eu concordo com Darren Kopp, que sugeriu que você precisa configurar mapeamento de manipulador no IIS de transmitir extensões desconhecidas para ASP.NET.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top