2009-09-25 7 views
5

Mam aplikację napisaną na ASP.NET MVC (V 1.0). Aplikacja działa na IIS7, a DNS jest dostarczany przez GoDaddy.Przekierowanie http://mydomain.com/ctrlr/act/val na http://WWW.mydomain.com/ctrlr/act/val

Chciałbym przekazać każdy wniosek, który pochodzi z http://mydomain.com/ctrlr/act/value do adresu URL tego formularza: http://WWW.mydomain.com/ctrlr/act/value

Zasadniczo chcę dodać WWW do nazwa-hosta, jeśli ktoś próbuje dotrzeć http://mydomain.com

Co byłby najlepszy sposób na zrobienie tego?

+0

Myślę, że to raczej pytanie IIS. Powinieneś dodać tag, aby zwrócić uwagę IISersów. –

+0

Dlaczego chcesz to zrobić? – SLaks

+0

Nie będę podawał tego jako odpowiedzi, ponieważ wymagałoby to zmiany stosu deweloperów. Ale oto jak rozwiązałem ten sam problem dla mojego bloga za pomocą Apache: http://pastie.org/630298. Jedyną różnicą jest to, że przygotowuję blog zamiast www. Zauważ też, że ten sam serwer odpowiada dla obu nazw domen w moim przypadku (nie wiem, czy to twój przypadek). –

Odpowiedz

11

myślę, że będzie znaleźć odpowiedź, która pasuje z tym question

zgadzam się z ideą zmuszając użytkowanie poza www, jakby więc postanowiłem use it wierzę, że żałował gdy szczypanie wydajność ciasteczek i trzeba użyć sstatic.net zamiast images.stackoverflow.com powiedzieć.

Aby zapisać tutaj przekierowanie, najważniejsze jest to, co należy zrobić.

Oto zasada IIS7 dodająca prefiks WWW do wszystkich przychodzących adresów URL. Wytnij i wklej ten fragment XML do pliku web.config pod

<system.webServer>/<rewrite>/<rules> 


<rule name="Add WWW prefix" > 
<match url="(.*)" ignoreCase="true" /> 
<conditions> 
<add input="{HTTP_HOST}" pattern="^domain\.com" /> 
</conditions> 
<action type="Redirect" url="http://www.domain.com/{R:1}" 
    redirectType="Permanent" /> 
</rule> 
+0

proste i proste rozwiązanie. Dzięki @dove –

+0

Nie sądzę, że istnieje powód dla 'ignoreCase', w którym regex deseń to'. * '. –

1

Można użyć Url Rewriter z kodu Plex. Można wymusić wszystko www.domain.com wykonując następujące czynności:

RewriteCond %{HTTP_HOST} !^(www).*$ [NC] 
RewriteRule ^(.*)$ http://www.%1$1 [R=301] 

Albo jeśli chcesz uczynić go bardziej specyficzne dla domeny

RewriteCond %{HTTP_HOST} !^www.mydomain.com$ [NC] 
RewriteRule ^(.*)$ http://www.mydomain.com$1 [R=301] 

obsługuje także całą masę innych rewriter funkcje zapewniane przez mod_rewrite.

0

Tylko ten odpowiedział na osobnym wątku, ale będę ponownie po

Zdecydowałam się zrobić to na poziomie aplikacji, zamiast IIS. Oto szybki filtr akcji, który napisałem, aby to zrobić. Po prostu dodaj klasę gdzieś w projekcie, a następnie dodaj [RequiemWww] do pojedynczej akcji lub całego kontrolera.

public class RequiresWww : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      HttpRequestBase req = filterContext.HttpContext.Request; 
      HttpResponseBase res = filterContext.HttpContext.Response; 

      //IsLocal and IsLoopback i'm not too sure on the differences here, but I have both to eliminate local dev conditions. 
      if (!req.IsLocal && !req.Url.Host.StartsWith("www") && !req.Url.IsLoopback) 
      { 
       var builder = new UriBuilder(req.Url) 
       { 
        Host = "www." + req.Url.Host 
       }; 

       res.Redirect(builder.Uri.ToString()); 

      } 

      base.OnActionExecuting(filterContext); 
     } 
    } 

Następnie

[RequiresWwww] 
public ActionResult AGreatAction() 
{ 
... 
} 

lub

[RequiresWwww] 
public class HomeController : BaseAppController 
{ 
.. 
.. 
} 

nadzieja, że ​​ktoś pomaga. Twoje zdrowie!