2013-12-20 165 views
9

我有一個domain.com/index.php和一個友好的url規則來重定向domain.com/index.php?s=?要求。我使用帶有URL重寫附加組件的IIS webserver。如何使用IIS URL重寫來排除目錄?

上面的工作正常。然而,請求到管理員目錄有問題...

我也有domain.com/admin/cloud/index.php,有時需要獲取或發送數據(通過Ajax)。當規則處於活動狀態時,數據不可用,當我刪除上述規則時,則數據可用。

如何使用上面的url規則並排除(或到)domain.com/admin/ ..中的所有其他請求?

這是我目前的規則集:

<rule name="RedirectUserFriendlyURL1" stopProcessing="true"> 
    <match url="^index\.php$" /> 
    <conditions> 
     <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" /> 
     <add input="{QUERY_STRING}" pattern="^s=([^=&amp;]+)$" /> 
    </conditions> 
    <action type="Redirect" url="{C:1}" appendQueryString="false" /> 
</rule> 
<rule name="RewriteUserFriendlyURL1" stopProcessing="true"> 
    <match url="^([^/]+)/?$" /> 
    <conditions> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
    </conditions> 
    <action type="Rewrite" url="index.php?s={R:1}" /> 
</rule> 

我嘗試過很多辦法,包括路徑信息...但沒有成功。也許有人可以提供一個提示?

謝謝!

+0

你好,你在這裏提供兩條規則。哪個規則是弄亂/admin/cloud/index.php請求的規則? –

+0

好問題。我不知道。看來IIS或URL重寫模塊會混淆請求。我現在分開了規則:1)檢查它是否包含「雲」和2)檢查是否必須重寫到index.php(因此從友好的URL到內部的URL)。如果檢查有效(在這種情況下,第二個規則不是必需的),則第一條規則會停止處理...由於某種原因,第一條檢查不是繞過問題的解決方案。 [..] – Arjen

+0

[..]只有第二條規則,友好的url正在工作,但不是管理部分。只有第一個規則管理部分工作,但不友好的網址部分。有時候,它確實有效......但是在幾分鐘或幾小時後,具有兩個分開的規則的解決方案不再有效。我不知道在哪裏找到「真正的問題」。 – Arjen

回答

22

看一看here您可以添加此規則,以便在您不想處理的請求出現時,您可以忽略它並停止處理。

它應該放在第一位,以便該規則在其他兩位之前執行。

<rule name="block" stopProcessing="true"> 
    <match url="^admin/cloud/index.php$" /> 
    <action type="None" /> 
</rule> 
+5

感謝感謝 – JajaDrinker

+0

它不適用於我的asp.net mvc應用程序 – Shahdat

+0

@Shahdat這些規則在請求到達ASP.NET引擎之前應用,因此它應該可以工作。考慮發佈一個問題並將鏈接放在這裏,以便我可以看一看。 –