2015-05-11 20 views
6

Alt etki alanının yeniden yazıldığı IIS'de bir URL yeniden yazmak istiyorum. Örneğin:IIS: Varsayılan Web Sitesi Dışında URL Yeniden Yazma için Uygulama İsteği Yönlendirmesini Kullanma

  • www.mycompany.com/api/v1.0api1.mycompany.com
  • www.mycompany.com/api/v2.0 için yeniden alır ben başka bir deyişle rewrite değil redirect, istediğinizi api2.mycompany.com

Not yeniden yazılarak alır, tarayıcınızdaki URL kalır www.mycompany.com/api/v1.0 ve www.mycompany.com/api/v2.0.

Yukarıdaki kalıplara uymayan herhangi bir istek, www.mycompany.com tarafından işlenmeye devam etmelidir.

Anlayışım, yalnızca Rewrite 2.0 modülünün bunun gerçekleşmesi için yeterli olmadığıdır, bu yüzden Uygulama İsteği Yönlendirme 3.0'ı yükledim. İşte yapmak istediğim şey için web.config: Ben Uygulama İstek Yönlendirme yüklendikten sonra

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
     <directoryBrowse enabled="false" /> 
     <rewrite> 
      <rules> 
       <rule name="API v1.0" stopProcessing="true"> 
        <match url="^api/v1.0/(.*)$" /> 
        <action type="Rewrite" url="http://api1.mycompany.com/{R:1}" /> 
       </rule> 
       <rule name="API v2.0" stopProcessing="true"> 
        <match url="^api/v2.0/(.*)$" /> 
        <action type="Rewrite" url="http://api2.mycompany.com/{R:1}" /> 
       </rule> 
      </rules> 
     </rewrite> 
    </system.webServer> 
</configuration> 

, İşe bu almanız mümkün, ama yalnızca www.mycompany.com IIS için Default Website olduğunu. Başka bir deyişle, IIS şekilde ayarlanmış yalnızca:

  • Standart Web sitesi (www.mycompany.com)
    • bu site için web.config
  • api1.mycompany.com
  • api2.mycompany.com
  • yukarıda gösterilmektedir

Sorunum, www.mycompany.comolamaz(Varsayılan Web Sitesi, sunucudaki başka bir site tarafından ayrılmıştır). www.mycompany.com sadece api1.mycompany.com veya api2.mycompany.com gibi başka bir web sitesidir. www.mycompany.comDefault Website olmadan çalışmak için bunu elde etmek için herhangi bir yolu var mı? Böyle bir şey mi?

  • Standart Web sitesi (olmayan başka bir ilgili web sitesi bazı)
  • www.mycompany.com
    • bu site için web.config
  • api1.mycompany.com
  • api2.mycompany.com
yukarıda gösterildiği gibi
+0

Ben tam bu birkaç hafta geri yapmak istedim. URL Rewrite 2.0 ile yapılabileceğinden emin değilim. Bana öyle geliyor ki istek ilk önce yeniden yazma modülüne geçiyor, daha sonra aynı uygulama havuzunda yeni bir tanıtıcıya aktarılan eşleştirmelere dayanıyor. URL Yeniden Yazma, isteği başka bir makineye veya uygulama havuzları arasında iletmesi gerektiğinde istediğiniz şekilde çalışmaz. IIS'deki diğer araçlarla istediğiniz şeyi elde etmenin mümkün olması durumunda soruyu biraz daha genelleştirmenizi öneririm. Bu soruya oy verdim çünkü hala yanlış olduğumu ümit ediyorum: D –

+0

* C: \ Windows \ System32 \ inetsrv \ config \ applicationHost.config * üzerinde değişiklik yapabilir misiniz? –

+0

@CyrilDurand, applicatiohHost.config üzerinde hangi değişikliklerin yapılması gerektiğine dair ayrıntılı bilgi verebilir misiniz? –

cevap

3

C:\Windows\System32\inetsrv\config\applicationHost.config yapılandırma dosyasını değiştirebiliyorsanız, yeniden yapılandırma yapılandırmanızı içine koyabilirsiniz.

Yerel olarak sınayın ve IIS8 ve ARR 3.0 altında çalışır.

Application Request Routing configuration

böyle My applicationHost.config dosya bakmak

IIS configuration:

<system.webServer> 
    <rewrite> 
     <rules> 
      <rule name="API v1.0" stopProcessing="true"> 
       <match url="^api/v1.0/(.*)$" /> 
       <action type="Rewrite" url="http://api1.company.com/{R:1}" /> 
      </rule> 
      <rule name="API v2.0" stopProcessing="true"> 
       <match url="^api/v2.0/(.*)$" /> 
       <action type="Rewrite" url="http://api2.company.com/{R:1}" /> 
      </rule> 
     </rules> 
    </rewrite> 
</system.webServer> 

<!-- ... ---> 

<webFarms> 
    <applicationRequestRouting> 
     <hostAffinityProviderList> 
      <add name="Microsoft.Web.Arr.HostNameRoundRobin" /> 
      <add name="Microsoft.Web.Arr.HostNameMemory" /> 
     </hostAffinityProviderList> 
    </applicationRequestRouting> 
</webFarms> 

<!-- ... ---> 

<system.applicationHost> 
    <sites> 
     <site name="Default Web Site" id="1" serverAutoStart="true"> 
      <application path="/"> 
       <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" /> 
      </application> 
      <bindings> 
       <binding protocol="http" bindingInformation="*:80:" /> 
      </bindings> 
     </site> 
     <site name="company.com" id="2"> 
      <application path="/" applicationPool="company.com"> 
       <virtualDirectory path="/" physicalPath="C:\tmp\company.com\www" /> 
      </application> 
      <bindings> 
       <binding protocol="http" bindingInformation="*:80:www.company.com" /> 
      </bindings> 
     </site> 
     <site name="api1.company.com" id="3"> 
      <application path="/" applicationPool="api1.company.com"> 
       <virtualDirectory path="/" physicalPath="C:\tmp\company.com\api1" /> 
      </application> 
      <bindings> 
       <binding protocol="http" bindingInformation="*:80:api1.company.com" /> 
      </bindings> 
     </site> 
     <site name="api2.company.com" id="4"> 
      <application path="/" applicationPool="api2.company.com"> 
       <virtualDirectory path="/" physicalPath="C:\tmp\company.com\api2" /> 
      </application> 
      <bindings> 
       <binding protocol="http" bindingInformation="*:80:api2.company.com" /> 
      </bindings> 
     </site> 
    </sites> 
</system.applicationHost> 

Final result

+0

Tüm adımlarınızı denedim, ancak bunu işe alamıyorum. Api2.mycompany.com/books adreslerine doğrudan erişim çalışıyor ancak www.mycompany.com/api/v2.0/books adresinden erişmeye çalışıyor ve 404 yanıtı alıyorum. Örneğinizde www.company.com, IIS'de 'Varsayılan Web Sitesi' olarak ayarlanmış mı (yani, varsayılan olarak IIS'de gelen)? –

+0

@JohnnyOshika Değildi ama tekrar denedim ve aynı şekilde çalışıyor, ayrıca cevabımı da düzenliyorum. Belki de uygulama, URL'deki bir şeyi kontrol eder ve başarısız olur (ASP.net yönlendirme). 'Index.html' gibi basit bir kaynak kullanmayı deneyip çalışıp çalışmadığını görebilir misiniz? –

+0

Wow, basit html dosyaları kullanırken işe yaradı. Nesneleri yanlış yönlendiren bir şey olmalı. Teşekkür ederim! –

İlgili konular