Come forzare example.com a essere reindirizzato su www.example.com con la riscrittura dell'URL in IIS7? Che tipo di regola dovrebbe andare in web.config? Grazie.Riscritto URL IIS7 - Aggiungi prefisso "www"
risposta
Si tratta di esempio di Microsoft per URL Rewrite Module 2.0 che reindirizza * .fabrikam.com a www.fabrikam.com
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Add www" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions>
<add input="{HTTP_HOST}" pattern="www.fabrikam.com" negate="true" />
</conditions>
<action type="Redirect" url="http://www.fabrikam.com/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Non sono sicuro circa il modo migliore per fare questo, ma ho un sito con tutti i vecchi domini/sottodomini che eseguono questo web.config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Transfer" stopProcessing="true">
<match url=".*" />
<action type="Redirect" url="http://www.targetsite.com/{R:0}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
sembra ottenere il lavoro fatto.
Questo non solo reindirizza automaticamente ogni richiesta che arriva al tuo server? Mi aspetterei che i tuoi clienti, se ispezionassero il loro traffico, vedessero un 301 per ogni richiesta. – LeRoy
circa un anno di ritardo per rispondere al tuo commento, ma ho una sola app per www.targetsite.com, e un'altra applicazione che risponde ai domini che voglio inoltrare. se un'applicazione ospita entrambi, è ovviamente necessario avere una condizione. – Sciolist
Per renderlo più generico è possibile utilizzare seguente regola URL Rewrite, che lavora per qualsiasi dominio:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Add WWW" stopProcessing="true">
<match url="^(.*)$" />
<conditions>
<add input="{HTTP_HOST}" pattern="^(?!www\.)(.*)$" />
</conditions>
<action type="Redirect" url="http://www.{C:0}{PATH_INFO}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
Funziona finché non si dispone di sottodomini. – jpkeisala
non sono sicuro se questo aiuta, ma ho scelto di fare questo a livello di applicazione. Ecco un rapido filtro azione che ho scritto per fare questo .. Aggiungi semplicemente la classe da qualche parte nel tuo progetto, quindi puoi aggiungere [RequiresWwww] a una singola azione o a un intero controller.
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);
}
}
Poi
[RequiresWwww]
public ActionResult AGreatAction()
{
...
}
o
[RequiresWwww]
public class HomeController : BaseAppController
{
..
..
}
Speranza che aiuta qualcuno. Saluti!
Sono sicuro che questo funziona, ma il problema è che se si deve disattivare SSL da IIS, beh, non è possibile. Questo per me è richiesto per ottenere un nuovo certificato da criptare per esempio, basta una rapida riscrittura per disattivare, ottenere certificati, riaccendere. In questo modo ho bisogno di ripubblicare. Questo non è affatto polimorfico e considerato una cattiva pratica. – ppumkin
duplicato di http://stackoverflow.com/questions/1476934/forwarding-http-mydomain-com-ctrlr-act-val-to-http-www-mydomain-com-ctrlr-act/1476986#1476986 –
Perché deve essere la riscrittura dell'URL? Perché non l'approccio tradizionale: creare un host virtuale associato a 'example.com' che fornisce un semplice 'Reindirizzamento HTTP' a' http: // www.example.com/'(con codice di stato 301 e senza 'destinazione esatta) 'opzione, quindi il percorso rimane intatto). – bobince
Credo che sia più logico includere questo comportamento all'interno dell'applicazione stessa, piuttosto che crearne un altro per supportarlo. Ma altrimenti probabilmente non c'è alcuna differenza, o c'è? – niaher