IIS üzerinde bulunan Rewrite modülü, URL için yeniden yazma diye adlandırılan kuralları uygulamayı sağlar.
- Dış dünyaya açık olmayan iç sunuculara erişimin kontrolü
- Kurumunuzdan tek bir IP üzerinden erişim sağlanabilen URL adreslerine erişimin çoğaltılabilmesi ve güvenlik altına alınabilmesi
gibi bir dizi kuralların uygulanması URL Rewrite modülü ile gerçekleştirilebilir. Bunun için IIS üzerinde bir Web site veya bir web site içerisine oluşturulan bir uygulama üzerinden bu kurallar tanımlanabilir.
Kurallar IIS arayüz ekranından tanımlanabildiği gibi, web sitesi dizininde bulunan Web.config dosyasında de tanımlanabilmektedir. Zaten arayüzden yapılan ayarlar da Web.config içerisine yazılmaktadır.
Örnek Kurallar
Bu kurallara göre,
- Kuralı uyguladığınız siteye, örneğin http://uygulama.com/api şeklinde gelen talepler http://172.16.10.11/api adresine yönlendirilir.
- http://uygulama.com/api?a=1&b=2 ile gelen querystring parametreleri aynı şekilde yönlendirmeye taşınır.
- http://172.16.10.11/api adresindeki api, basic authentication ile doğrulama gerektiriyor. Kullanıcı adı ve şifre bilgileri Base64 string olarak kodlanıp sunucu değişkeni(server variable) olarak eklenmektedir.
Server Variable Hatası
Kurallara ServerVariables eklendiğinde karşılaşılabilecek olası hatlardan biri 500 internal error olacaktır.
Hata sayfasında hata hakkında detaylı bilgi bulunmamaktadır. Detaylı bilgileri alabilmek için Web.config içerisinde hata aşağıdaki ayarları yapabilirsiniz.
<system.webServer>
<httpErrors errorMode="Detailed" />
</system.webServer>
<system.web>
<customErrors mode="Off"/>
</system.web>
Bu ayarlamadan sonra hata detaylarını şu şekilde görebilirsiniz.
HTTP Error 500.50 – URL Rewrite Module Error.
The server variable “HTTP_Authorization” is not allowed to be set. Add the server variable name to the allowed server variable list.
Hata detayına göre Server Variable olarak kullanılacak bilginin IIS web sitesinde önceden belirtilmesi gerekmektedir. Bunun için URL Rewrite penceresinde, sağ taraftaki View Server Variables kısmından HTTP_AUTHORIZATION değişkenini eklemelisiniz. Bu sayede URL Rewrite modülüne, Authorization header tanıtılmış olacak ve hata ortadan kalkacaktır.