2011-11-24 13 views

Odpowiedz

7

Można zainstalować Url moduł Rewrite: http://www.iis.net/downloads/microsoft/url-rewrite
Pamiętaj, że moduł ten działa na IIS, a nie na Cassini/IIS Express.

I dodać następującą regułę do web.config do sekcji <system.webServer>

<rewrite> 
    <rules> 
     <rule name="robots" stopProcessing="true"> 
      <match url="robots.txt" /> 
      <action type="Rewrite" url="/Content/robots.txt" /> 
     </rule> 
    </rules> 
</rewrite> 

sprawdziłem go na nowy projekt MVC 3 NET i obie reakcje URL z tego samego pliku: mywebsite.com/robots .txt
mywebsite.com/Content/robots.txt

+0

Miło, ale bądź ostrożny z Rewrite 1.0 w połączeniu z rolami Azure Web :) –

+0

Czy to nadal jest problem z URL Rewrite 2.0? – jbolanos

0

Rozwiązanie 1: Jeśli podasz adres URL. Przeglądarka poprosi o to do IIS lub serwera WWW. MVC nie uczestniczy w czytaniu pliku itp. Daje te żądania do obsługi IIS. Musisz przypisać uprawnienia do folderu.

Rozwiązanie 2: przeczytaj plik w PresentationModel, jeśli masz. przeczytaj ten plik w kawałkach i zwróć jako typ pliku do przeglądarki.

Mam nadzieję, że da ci to jakiś kierunek.

5

Możesz ustawić żądanie routingu dla plików dyskowych. Domyślnie system routingu sprawdza, czy URL dopasowuje plik dysku przed oceną tras aplikacji. Jeśli istnieje odpowiednik, plik dysku jest obsługiwany, a trasy nie są używane. Można to jednak wzbudzić, więc sprawdzane są trasy, zanim pliki dyskowe zostaną sprawdzone, ustawiając właściwość RouteExisitingFiles o wartości RouteCollection na true. Umieść to zdanie blisko początku metody RegisterRoutes - to po prostu konwencja dla aplikacji mvc. Następnie definiujesz trasę dla plików dyskowych. Bądź świadom tego, że mogą wystąpić nieprzewidziane efekty, ponieważ riute może natchnąć inne rodzaje adresów URL.

11

Dodawanie takiej trasy powinno wystarczyć. W ten sposób można obsłużyć dowolny statyczny plik .txt, taki jak plik robots.txt.

routes.IgnoreRoute("{resource}.txt"); 
+0

To nie działa, myślę, że musisz użyć innych metod wymienionych poniżej. Sugerowałbym moduł Urr Rewrite. –

+3

Ta technika sprawdziła się doskonale. (Umieszczam to na górze pliku RouteConfig.cs w metodzie RegisterRoutes().) – Greg

-1
routes.MapRoute("Robots","robots.txt"); 
0

udało mi się to zrobić w ścieżkach przepisywania obsługi zdarzeń dla BeginRequest w global.asax.

BeginRequest += delegate 
{ 
    switch (Request.RawUrl.ToLowerInvariant()) 
    { 
     case "/favicon.ico": 
      Context.RewritePath("~/Content/favicon.ico"); 
      return; 
     case "/robots.txt": 
      Context.RewritePath("~/Content/robots.txt"); 
      return; 
    } 
}; 
Powiązane problemy