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.

clip_image002

Z menu po prawnej stornie wybieramy Import Rules…

clip_image004

Wskazujemy plik .htaccess i klikamy Import. W zakładce Xml View mamy przekonwertowane reguły. Teraz wystarczy je przekopiować do pliku web.config.

clip_image006

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>