IIS Yeniden yazma, haritaları ve sorgu dizelerini yeniden yazma


10

Lütfen yeniden yazma haritalarını anlamama yardımcı olun, bu kurulum var:

<rewriteMap name="MyMap">
   <add key="/pages" value="/website/pages/index.aspx" />
   <add key="/pages/page-1" value="/website/pages/page-1/index.aspx" />
   <add key="/pages/page-1/section-1" value="/website/pages/page-1/section-1.aspx" />
</rewriteMap>

İşte benim kuralım:

<rule name="Rewrite rule for MyMap" stopProcessing="true">
   <match url=".*" />
   <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
      <add input="{MyMap:{REQUEST_URI}}" pattern="(.+)" />
   </conditions>
   <action type="Rewrite" url="{C:1}" appendQueryString="true" />
</rule>

Bu sayfalara erişmeye çalışırsam bu işe yarar:

  • www.alanadim.com/sayfalar (Tamam)
  • www.alanadim.com/sayfalar/sayfa-1 (Tamam)
  • www.alanadim.com/sayfalar/sayfa-1/seksiyon-1 (Tamam)

Ancak bu sayfalardan herhangi birine bir sorgu dizesi ekleme imkanı istiyorum, örnek:

  • www.alanadim.com/sayfalar?page=1 (BAŞARISIZ)

Bu sayfaya erişmeye çalıştığımda, bir 404 alıyorum. Bunu nasıl çalıştırabilirim?

Yanıtlar:


12

Varsayılan olarak, {REQUEST_URI} değişkeniyle eşleşen yeniden yazma eşlemeleri kullanılarak URL yeniden yazma kuralları oluşturulur . Buna URL + sorgu dizesi de dahildir. Bu, URL'lerle sorgu dizesi parametreleriyle eşleşmenize ve bunları diğer sayfalara yeniden yazmanıza olanak tanır. Çok kullanışlı ama görünüşe göre ne istediğinizi / ihtiyacınız değil.

Sorgu dizesi olmadan yalnızca URL ile eşleşmek istersiniz. Bunu değiştirmek için {URL} koşulunda {REQUEST_URI} ifadesini değiştirmeniz gerekir . Ardından yalnızca URL (sorgu dizesi olmadan) yeniden yazma eşlemesiyle eşleştirilir. Ardından, çalıştırılan komut dosyasının yine de erişebilmesi için sorgu dizesini yeniden yazılan URL'ye ekleyebilirsiniz.

Sonuç olarak aşağıdaki gibi bir kural elde edersiniz:

<rule name="Rewrite rule for MyMap">
    <match url=".*" />
    <conditions>
        <add input="{MyMap:{URL}}" pattern="(.+)" />
    </conditions>
    <action type="Rewrite" url="{C:1}" appendQueryString="true" />
</rule>

1
Harika bir açıklama. QueryString'i maç amaçları için nasıl görmezden gelmeyi merak ediyordum.
dthrasher

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.