IIS URL Rewrite i Web.config

Nic nie rozumiem o IIS, ale staram się rozwiązać ten problem przekierowania wszystkich odwiedzających do domain.com/page na domain.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>

Powstaje kilka problemów:

    Nie wiem, gdzie w ogóle umieścić plik. Istnieje katalog główny użytkownika i katalog htdocs, próbowałem obu, bez radości. Nie wiem nawet, czy konto da się przepisać, próbuję się tego dowiedzieć.
Author: abatishchev, 2010-12-10

3 answers

1) twoja istniejąca sieć.config: zadeklarowałeś przepisanie mapy .. ale nie stworzył żadnych reguł, które będą go używać. RewriteMap na własną rękę nie robi absolutnie nic.

2) Poniżej jest jak to zrobić (nie używa przepisywania Map -- tylko zasady, co jest dobre dla małej ilości przepisań/przekierowań):

Ta reguła wykona pojedyncze dokładne przepisanie (wewnętrzne przekierowanie) /page na /page.html. Adres URL w przeglądarce pozostanie niezmieniony.

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

Ta reguła # 2 zrobi to samo co wyżej, ale zrobi przekierowanie 301 (Permanent Redirect), gdzie URL zmieni się w przeglądarce.

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

Reguła # 3 spróbuje wykonać takie przepisanie dla dowolnego adresu URL, jeśli istnieje taki plik z .rozszerzenie html (np. dla /page sprawdzi, czy /page.html istnieje, a jeśli tak, to nastąpi przepisanie):

<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>
 102
Author: LazyOne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-19 00:39:14

Chciałem tylko zwrócić uwagę na jedną rzecz, której brakuje w odpowiedzi LazyOne (po prostu skomentowałbym pod odpowiedzią, ale nie mam wystarczającej rep)

W zasadzie # 2 dla stałego przekierowania brakuje czegoś:

redirectType="Permanent"

Więc zasada # 2 powinna wyglądać tak:

<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>

Edit

Aby uzyskać więcej informacji na temat korzystania z modułu przepisywania adresu URL, zapoznaj się z tą doskonałą dokumentacją: odniesienie do konfiguracji modułu przepisywania adresu URL

W odpowiedź na pytanie @kneidels z komentarzy; aby dopasować adres url: topic.php?id=39 można użyć czegoś takiego:

<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>

To dopasuje topic.php?id=ab Gdzie a jest dowolną liczbą pomiędzy 0-9 A b jest również dowolną liczbą pomiędzy 0-9. Następnie przekieruje do /newpage/xy, gdzie xy pochodzi z oryginalnego adresu url. Nie testowałem tego, ale powinno działać.

 13
Author: Hjalti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-05 15:10:05

Po prostu wypróbowałem tę zasadę i działało z hostingiem GoDaddy, ponieważ mają już zainstalowany moduł przepisywania adresu Microsoft URL dla każdego konta IIS 7.

<rewrite>
  <rules>
    <rule name="enquiry" stopProcessing="true">
      <match url="^enquiry$" />
      <action type="Rewrite" url="/Enquiry.aspx" />
    </rule>
  </rules>
</rewrite>
 9
Author: nolimit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-30 17:16:56