7

Ich gehostet mehrere Anwendungen auf IIS Server virtuelle Verzeichnisse und ich benutze URL Rewrite, um sie zu erleichtern. Alle Bilder und andere Assets, die manuell wie folgt geschrieben werden "~/path/to/my/content" hat eine korrekte Ausgabe "/path/to/my/content", aber Bündelpfade wie gibt eine Ausgabe "/myapplication/client/js", die "/client/js" sein sollte.MVC Bundles und IIS virtuelle Verzeichnisse (URL Neuschreiben)

Wie kann ich das beheben?

Wie starte ich Skript-Bundle:

var scriptBundle = new ScriptBundle("~/client/js"); 

Rewrite Konfiguration:

<rule name="Official Website" stopProcessing="true"> 
       <match url="(.*)" /> 
       <conditions> 
        <add input="{HTTP_HOST}" matchType="Pattern" pattern="^(www\.)?domain\.com$" ignoreCase="true" negate="false" /> 
       </conditions> 
       <action type="Rewrite" url="officialsite/{R:1}" /> 
      </rule> 

wurde in diesen Themen suchen, konnte aber nichts für mich arbeiten machen:

UPDATE: Ich verwende Winhost als Hosting-Provider, und sie unterstützen keine Host-Header für die IP-Einrichtung, wahrscheinlich aufgrund der gemeinsam genutzten IP. Sie stellen Domain-Pointer für Root-Ordner zur Verfügung, weshalb ich URL-Rewrite benutze.

+0

Sie haben uns gesagt, Sie Umschreiben, aber Sie haben beschlossen, nicht zu Ihren Rewrite-Regeln zu zeigen? Es sieht so aus, als wären sie Teil des Problems. – spender

+0

Es scheint mir, dass Sie mehrere Websites verwenden möchten, die mit Port 80 verknüpft sind und sich durch den Hostnamen unterscheiden. Sie müssen dafür keine URL-Umschreibung verwenden. Kann [dies] (http://forums.iis.net/t/1197454.aspx) sein, wonach Sie suchen? – milanio

+0

@milanio Hallo, Ich benutze WinHost als mein Hosting-Provider, und das einzige, was ich tun kann, ist Domain-Zeiger auf entsprechende Root-Ordner setzen. Sie bieten keine Host-Header wie in dem von Ihnen bereitgestellten Link an. Danke dir. – skmasq

Antwort

0

Sie sagte:

ich mehrere Anwendungen auf IIS-Server virtuelle Verzeichnisse bin Hosting und ich bin mit URL Rewrite sie

So zu erleichtern, das Problem zu Root-Konfiguration bezieht sich (Virtual Directory), die für die Bündelung und so weiter verwendet werden können. Es geht nicht darum, die Konfiguration zu bündeln oder Regeln neu zu schreiben. Ich denke, Sie müssen myapplication Verzeichnis als virtuell einrichten und es als separate Website einrichten. Achten Sie darauf, in Create Web Site verfügbar Anweisungen befolgt haben, wo es heißt:

Sie eine Website in IIS hinzufügen, eine Website Eintrag in der ApplicationHost.config Datei erstellt. Der Eintrag gibt:

  1. Netzwerk für die Bindungsstelle
  2. Karten der Standort zu einem Ort im Dateisystem
  3. gibt optional Benutzeranmeldeinformationen für den Zugriff auf Inhalte

Um sicherzustellen, dass Benutzer sicherstellen, Wenn die Anforderungen die richtige Website erreichen, müssen Sie für jede Site auf dem Server eine eindeutige Identität konfigurieren. Web Sites, die auf demselben Server gehostet werden, können anhand der folgenden eindeutigen IDs unterschieden werden.

  • Host-Headername ( empfohlen)
  • IP-Adresse
  • TCP-Portnummer

Configure a Host Header for a Web Site (IIS 7) zeigt auf den ersten.

Update: Ich denke, es kann einen Namenskonflikt auf dem Server und Ihrem Projekt sein. heller versuchen, Client in ~/client/js und seinen Ordner zu ändern. Sofern nicht mehrere Pfadoptionen (mit dieser Pfadtiefe) für den Server vorhanden sind, können Sie ihn lösen, indem Sie eine zusätzliche Tiefe hinzufügen, indem Sie in Ihrem Projekt und js bundle mapping ein \ hinzufügen.

Update2: Schließlich empfehle ich Ihnen in How to publish or host subdomain on winhost.com? verfügbar ganzen Artikel folgen so dieses erstaunliche Problem zu lösen :)

+0

Danke für die Antwort. Ich befolgte diese Anweisungen (http://goo.gl/MGceH5), wie diese virtuellen Verzeichnisse erstellt werden, und ich konnte zwei verschiedene Sites mit verschiedenen Subdomains einrichten und alles auf beiden Seiten funktioniert mit Ausnahme des Bündelungaspekts (sogar relative HTML-Pfade) '~/Content' Auflösung zu'/Content' nicht '/ myapplication/Content', was ich brauche. Zum Beispiel, wenn ich '/ myapplication' aus '/ myapplications/client/js? V = 123123' heraushole, holt es sich die korrekte gebündelte js-Datei. 'ApplicationHost' Konfigurationsdatei, ich habe keinen Zugriff darauf, und ich kann IIS-Bindungen nicht einrichten. – skmasq

+0

@skmasq Siehe mein Update bitte. Ich hoffe zu lösen. –

+0

Ordnerstruktur Ich habe 'Content/client/js', aber der aufgelöste Bundle-Pfad ist' client/js', der nie in Konflikt geraten ist. Um nur darauf hinzuweisen, funktioniert die Bündelung nicht nur in diesem virtuellen Verzeichnisszenario. – skmasq

0

Ich habe zwei Optionen, die Sie ausprobieren können.

1) Versuchen Sie dies mit es dazu verleiten, den richtigen Pfad mit:

var scriptBundle = new ScriptBundle("~/../client/js"); 

Sie können ein HttpException bekommen (kann ein nicht nutzen führende .. oben das Top-Verzeichnis verlassen), aber es lohnt sich. ein Schuss. Ich kann Ihre Umgebung nicht replizieren, so dass ich nicht testen kann.

2) Erstellen Sie Ihre eigenen virtuellen Pfad Anbieter: Changing ASP.net application root?

+0

Ich habe deinen ersten Vorschlag ausprobiert, leider endete es einfach als Fehler. Was den zweiten Vorschlag betrifft, so verstehe ich nicht wirklich das Konzept von "VirtualPathprovider" und mit dem mitgelieferten Sample habe ich Schwierigkeiten, die Datei abzurufen. – skmasq