iis7 reescrever url (remover .aspx) e obter erro 404

1

Eu tenho um problema com o módulo de reescrita de url do IIS7, quando adiciono a seguinte regra recebo um erro 404 em todas as páginas.

<rule name="Remove .aspx" stopProcessing="true">
<match url="(.+)\.aspx" />
<action type="Redirect" redirectType="Permanent" url="{R:1}" />

Tudo o que quero fazer para remover todas as extensões de arquivos. Eu me perco com isso, talvez alguém conheça a solução?

Obrigado antecipadamente.

Atenciosamente, eimeim

    
por eimeim 20.10.2011 / 01:54

1 resposta

1

Remover .aspx da URL redirecionando o usuário para a URL sem .aspx é apenas uma parte das soluções.

Se você fizer esse redirecionamento, como o servidor saberá qual script (com extensão .aspx) será executado se a URL não contiver o nome correto (sem a extensão .asp)? Então você tem que adicionar uma regra para corrigir isso. A maneira de fazer isso é criar uma regra que corresponda a qualquer URL, mas que não corresponda a nenhum arquivo ou diretório existente. Se encontrarmos isso, podemos supor que pode ser um link reescrito para uma página ASPX, então nós reescrevemos a URL para adicionar .aspx. Se não for uma página ASPX, resultará em um 404, de qualquer forma.

Para que tudo funcione com o código existente, você precisa reescrever a resposta de suas páginas para remover todas as referências existentes a páginas .aspx para não incluir a extensão. Caso contrário, você receberá muitos redirecionamentos desnecessários e as postagens de formulários em páginas aspx não funcionarão mais.

Por último, mas não menos importante, você precisa desativar a compactação, pois a reimpressão de saída não funciona com a compactação ativada.

Isso tudo resulta nas seguintes regras de reconfiguração para você web.config:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="Remove .aspx from URL" stopProcessing="true">
                <match url="(.*)\.aspx$" />
                <action type="Redirect" url="/{R:1}" />
            </rule>
            <rule name="Add .aspx for non-existing files or directories">
                <match url="(.*)" />
                <conditions>
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                </conditions>
                <action type="Rewrite" url="/{R:0}.aspx" />
            </rule>
        </rules>
        <outboundRules>
            <rule name="Remove .aspx from links in the response" preCondition="Only for HTML">
                <match filterByTags="A, Area, Base, Form, Frame, IFrame, Link, Script" pattern="(.*)\.aspx(\?.*)?$" />
                <action type="Rewrite" value="{R:1}{R:2}" />
            </rule>
            <preConditions>
                <preCondition name="Only for HTML">
                    <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                </preCondition>
            </preConditions>
        </outboundRules>
    </rewrite>
    <urlCompression doStaticCompression="false" doDynamicCompression="false" />
</system.webServer>
    
por 05.11.2011 / 23:14

Tags