2013-06-12 25 views
6

Do lokalnego testowania deweloperów potrzebuję przechwycić wszystkie żądania do www.somedomain.com/XXX (gdzie X jest ścieżką) i wysłać je do localhost/somevdir/XXX.Konfigurowanie reguły przepisywania adresu URL dla konkretnej domeny

Dodałem to do mojego pliku HOSTS (c: \ windows \ system32 \ drivers \ etc):

127.0.0.1 www.mydomain.com 

Następnie w IIS8 (Windows 8), dodałem do mojego wiązania "Domyślna witryna internetowa" dla hosta www.mydomain.com. To działa, mogę teraz przeglądać www.mydomain.com/test.html i zobaczyć stronę testową html. Mój wirtualny katalog znajduje się w domyślnej witrynie internetowej. Następnie dodałem URL do przepisywania adresu URL do strony internetowej dla ostatniego fragmentu:

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

Ale - to nie działa. Dostaję 404, więc wygląda na to, że mecz nigdy się nie stanie. Próbowałem przekierować i przepisać, i próbowałem bez^w regex i kilka innych poprawek regex. Czy ktoś może wyjaśnić, co zrobiłem źle?

Odpowiedz

12

myślę dodaje powinno działać:

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

meczu na dowolny adres URL pilnuje sprawdzane są warunki, a zmienna serwer HTTP_HOST wydaje się najbardziej niezawodny sposób sprawdzania żądaną nazwę hosta. Można usunąć warunek wejściowy REQUEST_FILENAME, ale działa to całkiem nieźle, aby upewnić się, że pliki statyczne są zawsze wyświetlane.

+0

Prawie :) musiałem użyć przekierowania (przepisz nie działa) i musiał podać pełną ścieżkę z hostem ('http: // localhost/MyVDir/{1} R:') ale gdy już to zrobiłem, byłem w :) –

+0

Nie powinieneś uciekać od okresów we wzorcu nazw twoich domen?^((mojadomena \ .com) | (www \ .mydomain \ .com)) $ –

+0

Dobre miejsce, na szczęście dopasowanie postaci z okresów jest mało prawdopodobne, ponieważ większość ludzi nie będzie mieć strony wwwXmydomain.com gdzie X jest losowa litera. Dodatkowy nawias nie jest potrzebny. –

0

To lepiej nadaje się do połowu obu www. i nie www. wersje domeny (nawiasy ze znacznikiem? oznaczają opcjonalnie w warunkach wyrażeń regularnych), więc nie musisz dwukrotnie pisać w domenie, co może powodować błędy i dwa razy częściej pisać literówki.

<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> 
Powiązane problemy