2013-06-12 1 views
6

로컬 개발자 테스트의 경우 모든 요청을 www.somedomain.com/XXX (여기서 X는 경로)으로 가져와 localhost/somevdir/XXX으로 보내야합니다.특정 도메인에 대한 URL 다시 쓰기 규칙 설정

내 HOSTS 파일이 추가되었습니다 (C : \ WINDOWS \ system32 \ drivers \ etc 여기서,) :

127.0.0.1 www.mydomain.com 

다음은 IIS8 (윈도우 8)에서, 나는 바인딩 추가 한 내 www.mydomain.com 호스트의 "기본 웹 사이트". 이 작업을 통해 www.mydomain.com/test.html을 탐색하고 테스트 HTML 페이지를 볼 수 있습니다. 내 가상 디렉터리는 기본 웹 사이트 안에 있습니다. 그런 다음 URL 재 작성 URL을 웹 사이트에 마지막 비트로 추가합니다.

<rewrite> 
    <rules> 
     <rule name="mydomain.com" stopProcessing="true"> 
      <match url="^www.mydomain.com/(.*)" /> 
      <action type="Rewrite" url="localhost/MyVDir/{R:1}" logRewrittenUrl="true" /> 
     </rule> 
    </rules> 
</rewrite> 

하지만 작동하지 않습니다. 나는 경기가 결코 일어나지 않을 것 같아서 404를 얻는다. 나는 리다이렉션을 시도하고 다시 작성, 그리고 ^없이 정규식과 몇 가지 다른 정규식 비틀기를 시도했습니다. 누군가 내가 잘못한 것을 설명 할 수 있습니까?

<rule name="mydomain.com" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{HTTP_HOST}" pattern="^(mydomain\.com|www\.mydomain\.com)$" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
    </conditions> 
    <action type="Redirect" url="http://localhost/MyVDir/{R:1}" redirectType="Temporary" /> 
</rule> 

모든 URL의 일치 조건이 선택되어 있는지 확인하게하고 HTTP_HOST 서버 변수가 요청 된 호스트 이름을 확인하는 가장 신뢰할 수있는 방법을 보인다

답변

12

나는 다음과 같은 작동한다고 생각합니다. REQUEST_FILENAME 입력 조건을 제거 할 수는 있지만 정적 파일이 항상 제공되는지 확실히 확인하는 데는 매우 효과적입니다.

+0

거의 :) 내가 리디렉션 (재 작동하지 않았다)를 사용했고, 호스트와 전체 경로를 지정했다 ('에 http : // localhost를/MyVDir/{R : 1}') 그러나 일단 내가 그것을했으면, 나는에 있었다 : –

+0

당신은 당신의 도메인 이름에 대한 패턴으로 시대를 벗어나지 않아야하지 않습니까? $ –

+0

좋은 점, 운 좋게도 대부분의 사람들은 www가없는 www.mmydomain.com을 가지므로 마침표와 일치하는 모든 문자는 문제가되지 않을 것입니다. 여기서 X는입니다 (예 : www.mydomain.com). (mydomain \ .com) 임의의 문자. 여분의 괄호는 필요하지 않습니다. –

0

이 두 가지를 포착하는 것이 좋습니다. 및 www가 아닌. 도메인의 버전 (? 문자가있는 대괄호는 정규 표현식에서 선택 사항을 의미 함) 도메인을 두 번 쓸 필요가 없으므로 오타를 두 번 작성할 가능성이 있으므로 오류가 발생할 수 있습니다.

<rule name="mydomain.com" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{HTTP_HOST}" pattern="^(www.)?mydomain\.com)$" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
    </conditions> 
    <action type="Redirect" url="http://localhost/MyVDir/{R:1}" redirectType="Temporary" /> 
</rule>