2011-01-16 15 views
9

Yeniden Düzenleme Haritanım var ve istenen URL'ye yeniden yazılan URL'ye herhangi bir sorgu parametresi eklemek istiyorum. ÖrneğinIIS'ye Yeniden Sorgulama Dizesi Ekle Yeniden Yaz Harita

:?

  • /sayfa/abc/--->/index.cfm?page=abc (çalışıyor)
  • /sayfa/abc/Param1 = 111
  • --- > /index.cfm?page=abc & param1 = 111 (çalışmıyor)
  • /sayfa/abc /? param3 = 333 & param4 = 444 ---> /index.cfm?page=abc & param3 = 333 & param4 = 444 (çalışmıyor)

Benim web.config geçerli:

[...] 
<rules> 
    <clear /> 
    <rule name="Rewrite rule1 for SiteMapEngine"> 
     <match url=".*" /> 
     <conditions> 
      <add input="{SiteMapEngine:{REQUEST_URI}}" pattern="(.+)" /> 
     </conditions> 
     <action type="Rewrite" url="{C:1}" appendQueryString="true" /> 
    </rule> 
</rules> 
[...] 

cevap

0

İşte benim kuraldır. Beklendiği gibi çalışmıyor gibi görünüyor: Bu sorgu dizesi var olmadan

<rule name="Insert index.cfm" enabled="true" stopProcessing="true"> 
    <match url="^(.*)$" ignoreCase="false" /> 
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
    </conditions> 
    <action type="Rewrite" url="index.cfm/{PATH_INFO}" appendQueryString="true" /> 
</rule> 
11

Bunun için bir referans bulursan, sana canına, ama benim anlayış olduğunu IIS bazı sürümlerinde {REQUEST_URI} geri gelir ve irade Yeniden yazma etkinse tamamen boş ol.

Bunun yerine {PATH_INFO} kullanabilmeniz gerekir. http://drupal.org/node/298016

Microsoft'tan bir düzeltme var, ama ben hiç denemedim:

(! Drupal karşı) Bu hata raporu Tarif ettiğiniz konu, sanırım http://support.microsoft.com/kb/954946

+2

{PATH_INFO'yu} işi

Bunun yerine, REQUEST_URI ait ama sorgu dizesi olmadan eşdeğerdir PATH_INFO sunucu değişkeni kullanır. Teşekkür ederim – IgalSt

+1

Oh Tanrım bu nasıl sadece hayatımı kurtardı. – Leeish

23

Kısa cevap :

REQUEST_URI yerine PATH_INFO sunucu değişkenini kullanarak, sorgu dizesini eşlemeye dahil etmek istemezsiniz.

Tam açıklama:

Bu etmeden önce beni yakaladı - temelde IIS URL Rewrite Modülü Rewrite Maps kullanmanın bir incelik olduğunu. Senin durumunda

, SiteMapEngine URL'lerin bir statik anahtar-değer listesi olacaktır:

<rewrite> 
    <rewriteMaps> 
     <rewriteMap name="SiteMapEngine" defaultValue=""> 
      <add key="/page/abc/" value="/index.cfm?page=abc" /> 
      ... 
     </rewriteMap> 
    </rewriteMaps> 
    ... 
</rewrite> 

{SiteMapEngine: {REQUEST_URI}} Bu yeniden yazma harita eşleştirme anahtar olup olmadığını Kural çekleri koşul REQUEST_URI sunucu değişkeni: Bu değişken sorgu dizesi içerdiğini

{REQUEST_URI} = /page/abc/?param1=111 

Uyarı - bu nedenle eşleşen bir anahtarı bulmak için başarısız olur.

{PATH_INFO} = /page/abc/ 

Yani doğru kuraldır:

<rule name="Rewrite rule1 for SiteMapEngine"> 
    <match url=".*" /> 
    <conditions> 
     <add input="{SiteMapEngine:{PATH_INFO}}" pattern="(.+)" /> 
    </conditions> 
    <action type="Rewrite" url="{C:1}" /> 
</rule> 
+3

Parlak açıklama. Orijinal soruya tam olarak cevap vermek için, eylem etiketine appendQueryString = "true" değerini eklemeyi de unutmayın. – Keab42

İlgili konular