簡體   English   中英

IIS重寫不起作用(但重定向確實)

[英]IIS Rewrite not working (but redirection does)

我正在嘗試使用Rewrite Module 2.0進行URL 重寫,但我沒有運氣讓它工作。 我要做的是將端口80上的所有對Web應用程序的調用重新寫入IIS中托管的其他應用程序(或者可能在網絡上的不同服務器上)。 使用IIS提供的GUI我創建了以下規則:

<rewrite>
    <rules>
        <rule name="ReverseProxyInboundRule1" stopProcessing="true">
            <match url="site1/(.*)" />
            <action type="Rewrite" url="http://localhost:7001/{R:1}" />
        </rule>
    </rules>
</rewrite>

安靜簡單,但不幸的是它不起作用。 另一方面,當我將操作類型更改為Redirect ,它可以正常工作。

可能是什么問題呢?

昨天我遇到了同樣的問題,我花了很長時間才弄明白。

這里的關鍵是你的重寫動作中有一個http://前綴; 這使得這是一個需要由應用程序請求路由處理的特殊情況。 第一步是確保安裝了“應用程序請求路由”模塊。 您可以在https://www.iis.net/downloads/microsoft/application-request-routing找到該模塊。 安裝完成后,轉到IIS Web服務器(從您的網站升級),然后打開“應用程序請求路由緩存”功能。 從右側的操作中,選擇Server.Proxy.Settings ,並確保選中“啟用代理”復選框。 這允許將URL重寫任務重新路由到應用程序請求路由,並且您的反向代理應該適用於外部請求。

這個想法來自2009年的優秀博客文章: http//ruslany.net/2009/04/10-url-rewriting-tips-and-tricks/

當我試圖解決同樣的問題時偶然發現了這篇舊帖子。

解決了!

在IIS服務管理器中使用重寫URL功能,我創建了一個友好的URL規則。

這工作正常,當我查看web.config文件(www root)中的規則時,它顯示了1個重定向規則和1個重寫規則。

我編輯了這個以適應1場比賽。 然后我只是復制了這段代碼,編輯了每個代碼的產品ID。 示例如下:

            <rule name="RedirectUserFriendlyURL1" stopProcessing="true">
                <match url="^product\.php$" />
                <conditions>
                    <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
                    <add input="{QUERY_STRING}" pattern="^id_product=\b35\b" />
                </conditions>
                <action type="Redirect" url="990mm-bohemia-cast-iron-electric-radiator" appendQueryString="false" />
            </rule>

第一條規則在URL中查找字符串"product.php"並且"id_product=35" ,然后重定向到目前不存在的"990mm-bohemia-cast-iron-electric-radiator" 然后(見下文)

            <rule name="RewriteUserFriendlyURL1" stopProcessing="true">
                <match url="^\b990mm-bohemia-cast-iron-electric-radiator\b" />
                <conditions>
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                </conditions>
                <action type="Rewrite" url="product.php?id_product=35" />
            </rule>

此規則將"product.php?id_product=35"位重寫為“990mm-bohemia-cast-iron-electric-radiator”,為重定向創建新位置。

url重寫我遇到404錯誤。 也許你可以找到它usfull。 請訪問https://stackoverflow.com/a/47988082/5784543查看

確保MVC路由不會竊取您的請求。 要防止這種情況發生,請忽略您嘗試重寫的路徑:

RouteTable.Routes.Ignore("blog/{*pathInfo}");

靈感來自: https//sitecore.stackexchange.com/questions/3645/how-to-setup-a-reverse-proxy-with-sitecore

將重寫URL更改為AbsolutePath,而不是將http:// ...更改為

它對我有用,但就我而言,我已經改寫為固定的網頁。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM