2016-12-28 1 views
2

Ich benutze ColdFusion 10 und IIS 7.5 und versuchen, ein benutzerdefiniertes Routing für mein Projekt zu erstellen, die Abfrage Zeichenfolge vermeidet.Coldfusion - Vermeiden Sie IIS 404.0 Fehler für bestimmte Dateien und führen Sie stattdessen manuelle Routing

Zum Beispiel die folgende URL:

www.myTestWebsite.com/subfolder1/subfolder2/

sollte von einer router.cfm Datei geben werden, die in dem Stammordner vorhanden ist und dann Basierend auf der Zeichenfolge nach der Domain der Website (in diesem Fall/Unterordner1/Unterordner2 /) wird Coldfusion entscheiden, was und wie angezeigt werden soll.

Ich schaffte, alles außer einer Sache zu arbeiten. Wenn index.cfm (oder .html oder eine Standarddatei) nicht im Ordner/subordner1/subordner2/vorhanden ist, wird in IIS der Fehler 404.0 angezeigt. Wenn Sie jedoch die Ordnerstruktur erstellen und dort eine leere Datei index.cfm hinzufügen, funktioniert das Routing wie erwartet, wobei Sie diese leere index.cfm ignorieren und entsprechend der von mir implementierten Logik weiterarbeiten.

Gibt es eine Möglichkeit (über CF-Administrator, IIS, htaccess oder andere), um zu vermeiden, zu überprüfen, ob diese Datei existiert und eine 404.0 zu werfen, und mir stattdessen erlaubt, das über meine Route.cfm zu behandeln?

Antwort

3

ich in web.config verwenden Umschreiben:

<rule name="wvcms" patternSyntax="Wildcard" stopProcessing="true"> 
    <match url="*" /> 
    <conditions> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
    </conditions> 
    <action type="Rewrite" url="/route.cfm?cmspath=/{R:1}" /> 
</rule> 
+0

Hinweis: Dies erfordert, dass die IIS-URL (https Rewrite-Erweiterung installiert werden: // (http://www.iis.net/downloads/microsoft/url-rewrite). Verwenden der URL Rewrite-Funktion ist wahrscheinlich der einfachste Weg, um dieses Problem zu lösen. –

+0

So funktioniert das. Der Schlüssel ist URL Rewrite Erweiterung. –

3

Sie können dies mithilfe eines benutzerdefinierten ColdFusion-Servlet-Mappings tun. Die folgenden Informationen stammen aus der Taffy ColdFusion REST API Framework-Dokumentation.
http://docs.taffy.io/3.1.0#404-when-your-api-is-in-a-subdirectory

In Ihrem web.xml, müssen Sie eine zusätzliche Servletzuordnung hinzuzufügen:

<servlet-mapping> 
    <servlet-name>CFMLServlet</servlet-name> 
    <url-pattern>/api/index.cfm/*</url-pattern> 
</servlet-mapping> 

Dies liegt daran, Tomcat die Verwendung von zwei Platzhalter in seine Zuordnungen nicht unterstützt. Sie werden feststellen, dass bei der Installation von ACF oder Lucee in Tomcat eine web.xml mit Mappings mit dem URL-Muster index.cfm/* angezeigt wird, aber aufgrund dieser Einschränkung können Sie dies leider nicht in /ändern. index.cfm/.

In dem obigen XML können Sie sehen, dass ich nur 1 Platzhalter habe, aber zum Ausgleich habe ich den gesamten Pfad zu index.cfm angegeben, so dass nur 1 benötigt wird. (Beachten Sie, dass ich /api/index.cfm verwendet habe, weil es meinem Beispiel von 404 für /api/index.cfm/myResource entsprach ... Ihr sollte dem Speicherort Ihrer index.cfm entsprechen).

+0

Vielen Dank für Ihre Antwort Kevin. Ich hätte klarstellen sollen, dass ich in diesem Bereich völlig neu bin, daher werden die meisten Antworten (auch deine) in meinen Ohren seltsam klingen. Könnten wir eine Chat-Funktion nutzen, um in Echtzeit darüber zu sprechen? –

+0

Gern geschehen für die Antwort. Ich hoffe, dass es hilft, Ihr Problem zu lösen. Der Zweck der Stack Exchange-Sites besteht darin, die Gemeinschaft auf der Grundlage einer gemeinsamen, sichtbaren und transparenten Beteiligung der Gemeinschaft zu fördern, um den Postern dabei zu helfen, Probleme zu lösen. Wenn Sie weitere Fragen haben, empfiehlt es sich, sie öffentlich auf Stack Overflow zu veröffentlichen, damit die Konversation und die Antworten geteilt werden können. –

+0

P.S. Wenn meine Antwort zur Lösung Ihres Problems funktioniert, denken Sie bitte daran, sie als "akzeptiert" zu markieren. Vielen Dank! –

Verwandte Themen