developer tip

IIS URL 재 작성 및 Web.config

copycodes 2021. 1. 10. 17:27
반응형

IIS URL 재 작성 및 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>

몇 가지 문제가 발생합니다.

  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는 위와 동일하게 수행되지만 브라우저에서 URL이 변경되는 301 리디렉션 (영구 리디렉션)을 수행합니다.

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

규칙 # 3은 확장자가 .html 인 파일이있는 경우 모든 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>

This will match topic.php?id=ab where a is any number between 0-9 and b is also any number between 0-9. It will then redirect to /newpage/xy where xy comes from the original url. I have not tested this but it should work.


Just tried this rule, and it worked with GoDaddy hosting since they've already have the Microsoft URL Rewriting module installed for every IIS 7 account.

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

ReferenceURL : https://stackoverflow.com/questions/4410067/iis-url-rewrite-and-web-config

반응형