R2 güncellemesi ile birlikte Bisorusor.com'da ilginç bir hata kaydı ile karşılaşmaya başladık. Diyor ki:
Exception information:
Exception type: HttpException
Exception message: Cannot use a leading .. to exit above the top directory.
Biraz araştırma yapınca, konu ile ilgili güzel bir kaynak buldum, olayı gayet net açıklamış. (Aslen Fransızca'dan tercüme)
Teknik bir özetle; Windows 2003, üzerinde IIS 6.0 üzerindeki Asp.net 2.0 sitenizde URL-rewrite altyapısı kullandığınızda arama motorlarının user-agent bilgisi, kod içerisinde System.Web.UI.Html32TextWriter metodu yorumlanırken hataya sebep oluyor.
Teknik olmayan bir özetle; Arama motoru optimizasyonu yapılmış linkli sayfalar, arama motorlarının robotları dolanırken hata üretiyor, ve robotlar hatalı sayfalar görüp, sitenizi indeksleyemiyorlar. Belki indeksten çıkarıyorlar.
Hatanın sizde gerçekleşip gerçekleşemdiğini bir süre önce Microsoft tarafından satın alınan, HTTP debug proxy programı Fiddler kullanarak anlayabilirsiniz. Fiddler'ı açın, sağ kısımdan Request Builder'a gidin, url'i yazın, alttaki header bilgisinde User agent kısmını User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) olarak ayarlayın, Select Session'ı işaretleyip çalıştırın, karşınıza konumuz olan hata mesajı gelecektir.
Bu bir bug olsa da, uzun süredir bir fix çıkmadığından (ben görmedim), en hızlı çözüm yolu, yukarıdaki linklerde bahsedildiği gibi VS 2005 ile gelen .browsers uzantılı dosyaları kullanmak. Uygulamanızda Urlrewriter.net kullanmışsanız tahminen Form.browser dosyasına sahipsinizdir, ama onu da biraz değiştirmeniz gerecek.
1 - Projenize App_Browsers sistem dizinini ekleyin
2 - Bu dizin içine Form.browser isimli bir dosya koyun. (Yukarıdaki kaynaklar her robot için ayrı dosyalardan bahsetmişler ama bu durumda her robotun özelliklerini bilmek gerekiyor, onun yerine alttaki gibi genel bir tanım iş görüyor. Şuan denemelerimde bir sorunla karşılaşmadım.)
3 - Dosyayı şu şekile getirin.
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.HtmlControls.HtmlForm"
adapterType="FormRewriterControlAdapter" />
</controlAdapters>
<capabilities>
<capability name="activexcontrols" value="true" />
<capability name="backgroundsounds" value="true" />
<capability name="cookies" value="true" />
<capability name="css1" value="true" />
<capability name="css2" value="true" />
<capability name="ecmascriptversion" value="1.2" />
<capability name="frames" value="true" />
<capability name="javaapplets" value="true" />
<capability name="javascript" value="true" />
<capability name="jscriptversion" value="5.0" />
<capability name="supportsCallback" value="true" />
<capability name="supportsFileUpload" value="true" />
<capability name="supportsMultilineTextBoxDisplay" value="true" />
<capability name="supportsMaintainScrollPositionOnPostback" value="true" />
<capability name="supportsVCard" value="true" />
<capability name="supportsXmlHttp" value="true" />
<capability name="tables" value="true" />
<capability name="vbscript" value="true" />
<capability name="w3cdomversion" value="1.0" />
<capability name="xml" value="true" />
<capability name="tagwriter" value="System.Web.UI.HtmlTextWriter" />
</capabilities>
</browser>
</browsers>
Urlrewriter.net kullanıyorsanız, yukarıda kırmızı olanlar dışındaki alanlar Form.browser dosyanızda vardır. Burada <capabilities> tagını eklemiş olduk.
Projeyi derleyip denerseniz sistemin çalıştığını göreceksiniz.