Azure Web Site i .htaccess
01.06.2013 20:57
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/. @mktos już miał okazję opisać darmową wersję - http://www.dobreprogramy.pl/mktos/Darmowa-strona-WWW-na-Windows-Azure,...
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 </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> <rules> <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>