Azure Web Site i .htaccess
W chmurze Microsoftu pojawiła się możliwość hostowania witryn. Usługa ta nazywa się Windows Azure Web Site. Hosting ten występuję również w wersji darmowej. Darmowa wersja jest oczywiście z pewnymi ograniczeniami :) - http://www.windowsazure.com/en-us/develop/net/aspnet/.
Postanowiłem wypróbować WordPress’a korzystając z galerii w Azure. W trakcie użycia WordPress’a na Azure Web Site pojawiły się problemy z prawidłowym działaniem permalinks. Chciałem, aby permalinki były ustawione na http://blog.jakas.domena.com/%postname%. Po takim ustawieniu nie działało nic po za stroną główną. Za taki stan jest odpowiedzialna domyślna konfiguracja WordPress’a lub jak ktoś może uważać wina srury. Wordpress trafia do nas z konfiguracją przepisywania adresów zdefiniowaną w pliku .htaccess dla modułu mod_rewrite. Azure nie bazuje na Apach’u, ale na IIS i wykorzystuje moduł URL Rewrite. Do poprawnego działania trzeba przetłumaczyć reguły z mod_rewrite do URL Rewrite i zapisać je do pliku web.config.
Na szczęście kawałek z tłumaczeniem reguł jest ułatwiony i może zrobić za nas to automat, ale wymagana jest instalacja IIS lokalnie na Windowsie oraz modułu URL Rewrite.
Aby dokonać tłumaczenia instalujemy lokalnie IIS. Opis dla Windows 7 znajdziemy tutaj. Po instalacji IIS instalujemy URL Rewrite z tej strony http://www.iis.net/download/urlrewrite. Następnie uruchamiamy menadżer IIS. Przechodzimy do Site -> Default Web Site i klikamy na URL Rewrite.
Z menu po prawnej stornie wybieramy Import Rules…
Wskazujemy plik .htaccess i klikamy Import. W zakładce Xml View mamy przekonwertowane reguły. Teraz wystarczy je przekopiować do pliku web.config.
Plik web.config, który ma zawierać tylko reguły do przepisywania urli będzie wyglądał tak:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
Tutaj wklej zawartość przekonwertowane reguły<br />
</system.webServer>
</configuration>
A tak wygląda plik z domyślnymi regułami dla WordPress’a:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<!--This directive was not converted because it is not supported by IIS: RewriteBase /.-->
<rules>
<!--# BEGIN WordPress-->
<rule name="Imported Rule 1" stopProcessing="true">
<match url="^index.php$" ignoreCase="false" />
<action type="None" />
</rule>
<rule name="Imported Rule 2" stopProcessing="true">
<match url="." ignoreCase="false" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
</conditions>
<action type="Rewrite" url="/index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>