Dneska ráno nás v práci uvítal critical ticket v HelpDesku, jednomu ze zákazníků „nešel web a všechno, co po přihlášení zkusil, vedlo na homepage“. Hned se nám spojilo, že to je web, na který kolega nastavoval přesměrování HTTP requestů na HTTPS a zkoušel si různé způsoby, jak to udělat.
Jeden z testů, které udělal, byl přes <httpRedirect> (HTTP Redirection). Pak od něj ale upustil a redirect nastavený přes IIS Manager zase vypnul.
Souhra okolností chtěla, aby toto zapnutí a vypnutí způsobilo poměrně velký problém.
Po IIS Manageru zůstalo v hlavním ~/web.configu webu toto:
<system.webServer> <httpRedirect enabled="false" destination="https://chester.xerox.cz" httpResponseStatus="Permanent" /> </system.webServer>
To by samo o sobě nevadilo. Peklo však nastalo v okamžiku, kdy se to potkalo s web.config soubory v podsložkách, v nichž byla různá specifická přesměrování od vývojářů:
<system.webServer> <httpRedirect enabled="true" exactDestination="true"> <add wildcard="/Old-URL.aspx" destination="New-URL.aspx"/> ... </httpRedirect> </system.webServer>
Když se to celé sečetlo, tak ve všech takových podsložkách se reaktivoval disablovaný redirect z rootového web.configu a veškeré requesty na resources v dané složce přesměrovával.
…další důvod proč nemám rád, když IIS Manager modifikuje web.config. Hlavním je ten, že při nasazování chci web.config přepisovat vždy celý novou verzí a jakékoliv production-specific volby z něj mít vyextrahovány třeba pomocí atributu configSource.