programing

IIS URL 다시 쓰기 및 Web.config

instargram 2023. 6. 26. 21:02
반응형

IIS URL 다시 쓰기 및 Web.config

IIS에 대해 아무것도 이해할 수 없지만 모든 방문자를 다음으로 리디렉션하는 이 문제를 해결하려고 합니다.example.com/page로.example.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. 파일을 어디에 두어야 할지도 모르겠습니다.User root 디렉토리와 htdocs 디렉토리가 있습니다. 둘 다 시도해봤지만, 즐겁지 않았습니다.
  2. 저는 그 계정이 다시 쓸 수 있는지조차 모릅니다, 저는 그것을 알아내려고 노력하고 있습니다.

기존 web.config: 맵 다시 쓰기를 선언했지만 맵을 사용할 규칙을 만들지 않았습니다.RewriteMap은 자체적으로 전혀 작동하지 않습니다.

다음은 이 작업을 수행하는 방법입니다(다시 쓰기 맵을 사용하지 않고 규칙만 사용하며, 적은 양의 다시 쓰기/재연결에 대해서는 문제가 없습니다).

이 규칙은 단일 정확한 다시 쓰기(내부 리디렉션)를 수행합니다./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 Rewrite Module 사용 방법에 대한 자세한 내용은 이 우수한 문서: URL Rewrite Module Configuration Reference를 참조하십시오.

댓글의 @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에서 가져온 것입니다.나는 이것을 테스트하지 않았지만 작동할 것입니다.

방금 이 규칙을 사용해 봤는데 GoDaddy 호스팅과 함께 작동했습니다. 이미 모든 IIS 7 계정에 Microsoft URL 다시 쓰기 모듈이 설치되어 있기 때문입니다.

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

언급URL : https://stackoverflow.com/questions/4410067/iis-url-rewrite-and-web-config

반응형