Подтвердить что ты не робот

Переименование URL-адреса IIS и Web.config

Я ничего не понимаю о IIS, но я пытаюсь решить эту проблему перенаправления всех посетителей на domain.com/page на 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>

Возникает несколько проблем:

  • Я не знаю, куда даже поставить файл. Существует корневой каталог пользователя и каталог htdocs, я пробовал обе, без радости.
  • Я даже не знаю, может ли учетная запись переписывать, я пытаюсь найти это.
4b9b3361

Ответ 1

1) Ваш существующий web.config: вы объявили rewrite map.. но не создали никаких правил, которые будут его использовать. RewriteMap на свой счет абсолютно ничего не делает.

2) Ниже вы можете сделать это (он не использует переписывающие карты - только правила, что отлично подходит для небольшого количества переписываний/переадресаций):

Это правило будет делать SINGLE EXACT rewrite (внутреннее перенаправление) /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>

Правило № 3 будет пытаться выполнить такую ​​переписку для ЛЮБОГО URL-адреса, если есть такой файл с расширением .html(т.е. для /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>

Ответ 2

Просто хотел указать одну вещь, отсутствующую в ответе 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>

Edit

Для получения дополнительной информации о том, как использовать модуль перезаписи 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, где a - любое число между 0-9, а b также любое число между 0-9. Затем он перенаправляется на /newpage/xy, где xy поступает из исходного URL-адреса. Я не тестировал это, но он должен работать.

Ответ 3

Просто попробовал это правило, и он работал с хостингом GoDaddy, так как у них уже есть модуль перезаписи URL-адресов Microsoft для каждой учетной записи IIS 7.

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