IIS riscrive non funziona per semplici reindirizzamenti
-
22-12-2019 - |
Domanda
Tutto quello che voglio fare è 301 Reindirizza da vecchi URL a nuovi URL:
Da /xx/yy/somefile.html
a /xx/yy/somefile.aspx
Alcuni esempi di seguito:
add key="/products/DSD-72B-SP-summary.html" value="/products/DSD-72B-SP-summary.aspx"
add key="/products/DSD-72B-SP-detail" value="/products/DSD-72B-SP-detail.aspx"
add key="index.html" value="default.aspx"
add key="/product-selector.html" value="/products.aspx"
.
Questo è tutto tranne che non sembra voler lavorare in IIS 7.5 con URL Rewrite 2.0.
Ho provato almeno 10-20 diverse regole e riscriviti i formati della mappa senza fortuna. In effetti ho fatto così tante volte che ho dovuto pulire le regole e le mappe di IIS e il file di ricopia totalmente un file web.config da un backup per svitare ciò che ho ferito per provare a farlo funzionare.
Tutto ciò di cui ho bisogno è una regola semplice che dice IIS che se riceve una richiesta per un file * .html per visualizzare il file * .aspx che ha sostituito il file HTML.
<?xml version="1.0" encoding="UTF-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<appSettings configProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData>
</CipherData>
</EncryptedData>
</appSettings>
<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData>
</CipherData>
</EncryptedData>
</connectionStrings>
<system.web>
<customErrors mode="On" defaultRedirect="404-NotFound.aspx">
<error statusCode="404" redirect="404-NotFound.aspx" />
<!--<error statusCode="403" redirect=""/>-->
</customErrors>
<compilation debug="true" strict="false" explicit="true" targetFramework="4.0">
<!--<codeSubDirectories>
<add directoryName="CSharp"/>
<add directoryName="VB"/>
</codeSubDirectories>-->
</compilation>
<authentication mode="Forms">
</authentication>
<membership>
<providers>
<clear />
</providers>
</membership>
<profile>
<providers>
<clear />
</providers>
</profile>
<roleManager enabled="false">
<providers>
<clear />
</providers>
</roleManager>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
</modules>
<defaultDocument>
<files>
</files>
</defaultDocument>
<httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" path="/404-NotFound.aspx" responseMode="ExecuteURL" />
</httpErrors>
<tracing>
<traceFailedRequests>
<add path="*">
<traceAreas>
<add provider="WWW Server" areas="Rewrite" verbosity="Verbose" />
</traceAreas>
<failureDefinitions statusCodes="200-500" />
</add>
</traceFailedRequests>
</tracing>
</system.webServer>
</configuration>
. Soluzione
Assicurati di cancellare anche la cache.A volte è possibile aggiornare una regola del server, ma il tuo browser continuerà a mostrare la vecchia pagina.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Vanity URL" enabled="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{MAPNAME:{PATH_INFO}}" pattern="(.+)" />
</conditions>
<action type="Redirect" url="{C:1}" appendQueryString="false" />
</rule>
</rules>
<rewriteMaps>
<rewriteMap name="MAPNAME">
<add key="/products/DSD-72B-SP-summary.html" value="/products/DSD-72B-SP-summary.aspx" />
</rewriteMap>
</rewrite>
</system.webServer>
</configuration>
.
Il codice sopra riportato che prende direttamente dal mio sito web con modifiche minori dei nomi per la generalità e aggiunta nella pagina.Prova a rimuovere altre regole e isolare il problema.