簡體   English   中英

IIS URL 重寫和 Web.config

[英]IIS URL Rewrite and Web.config

我對 IIS 一無所知,但我正在嘗試解決將所有訪問者重定向到example.com/pageexample.com/page.html的問題

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.webServer>
    <rewrite>
          <rewriteMaps>
              <rewriteMap name="StaticRedirects">
                  <add key="/page" value="/page.html" />
              </rewriteMap>
            </rewriteMaps>
      </rewrite>
  </system.webServer>
</configuration>

出現了幾個問題:

  1. 我什至不知道把文件放在哪里。 有一個用戶根目錄和一個htdocs目錄,我都試過了,不高興。
  2. 我什至不知道該帳戶是否可以重寫,我正在嘗試找出答案。

1) 您現有的 web.config:您已經聲明了 rewrite map .. 但尚未創建任何使用它的規則。 RewriteMap 本身完全沒有任何作用。

2)下面是你如何做到這一點(它不使用重寫映射 - 僅規則,這對於少量的重寫/重定向很好):

此規則將 SINGLE EXACT 重寫(內部重定向) /page/page.html 瀏覽器中的 URL 將保持不變。

<system.webServer>
    <rewrite>
        <rules>
            <rule name="SpecificRewrite" stopProcessing="true">
                <match url="^page$" />
                <action type="Rewrite" url="/page.html" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

此規則 #2 將執行與上述相同的操作,但將執行 301 重定向(永久重定向),其中 URL 將在瀏覽器中更改。

<system.webServer>
    <rewrite>
        <rules>
            <rule name="SpecificRedirect" stopProcessing="true">
                <match url="^page$" />
                <action type="Redirect" url="/page.html" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

如果存在帶有 .html 擴展名的此類文件,規則 #3 將嘗試對任何 URL 執行此類重寫(即,對於/page ,它將檢查/page.html是否存在,如果存在,則發生重寫):

<system.webServer>
    <rewrite>
        <rules>
            <rule name="DynamicRewrite" stopProcessing="true">
                <match url="(.*)" />
                <conditions>
                    <add input="{REQUEST_FILENAME}\.html" matchType="IsFile" />
                </conditions>
                <action type="Rewrite" url="/{R:1}.html" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

只是想指出 LazyOne 的答案中缺少的一件事(我會在答案下發表評論,但沒有足夠的代表)

在永久重定向的規則 #2 中,缺少一些東西:

redirectType="Permanent"

所以規則 #2 應該是這樣的:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="SpecificRedirect" stopProcessing="true">
                <match url="^page$" />
                <action type="Redirect" url="/page.html" redirectType="Permanent" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

編輯

有關如何使用 URL 重寫模塊的更多信息,請參閱此出色的文檔: URL 重寫模塊配置參考

回應評論中的@kneidels 問題; 要匹配 url: topic.php?id=39可以使用如下內容:

<system.webServer>
  <rewrite>
    <rules>
      <rule name="SpecificRedirect" stopProcessing="true">
        <match url="^topic.php$" />
        <conditions logicalGrouping="MatchAll">
          <add input="{QUERY_STRING}" pattern="(?:id)=(\d{2})" />
        </conditions>
        <action type="Redirect" url="/newpage/{C:1}" appendQueryString="false" redirectType="Permanent" />
      </rule>
    </rules>
  </rewrite>
</system.webServer>

這將匹配topic.php?id=ab其中a0-9之間的任意數字, b 也是0-9之間的任意數字。 然后它將重定向到/newpage/xy ,其中xy來自原始 url。 我沒有對此進行測試,但它應該可以工作。

剛剛嘗試了這條規則,它適用於 GoDaddy 托管,因為他們已經為每個 IIS 7 帳戶安裝了 Microsoft URL 重寫模塊。

<rewrite>
  <rules>
    <rule name="enquiry" stopProcessing="true">
      <match url="^enquiry$" />
      <action type="Rewrite" url="/Enquiry.aspx" />
    </rule>
  </rules>
</rewrite>

暫無
暫無

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

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