2016-12-28 51 views
2

我使用的ColdFusion 10和IIS 7.5,並試圖爲我的項目,避免使用查詢字符串創建自定義路由。Coldfusion - 避免特定文件的IIS 404.0錯誤,並做手動路由代替

例如,下面的URL:

www.myTestWebsite.com/subfolder1/subfolder2/

應該從存在於根文件夾,然後一個router.cfm文件路過根據網站域名後面的字符串(在本例中爲/ subfolder1/subfolder2 /),coldfusion將決定要顯示的內容以及如何顯示。

我設法讓一切工作,除了一件事。如果/子文件夾1 /子文件夾2 /路徑中不存在index.cfm(或.html或任何默認文件),IIS將顯示404.0錯誤。但是,如果創建文件夾結構並在其中添加一個空的index.cfm文件,路由將按預期工作,忽略該空的index.cfm並根據我已實施的邏輯繼續。

有沒有辦法(通過CF管理員,IIS,htaccess或任何其他)來避免檢查該文件是否存在並拋出404.0,而是允許我通過我的route.cfm來處理?

回答

3

我重寫使用在web.config中:

<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

注意:這要求IIS URL重寫擴展安裝(https://開頭www.iis.net/downloads/microsoft/url-rewrite)使用URL Rewrite功能可能是解決這個問題的最簡單的方法 –

+0

類似這樣的工作,關鍵是URL Rewrite擴展。 –

3

您可以使用自定義的ColdFusion servlet映射來執行此操作。以下信息來自Taffy ColdFusion REST API框架文檔。
http://docs.taffy.io/3.1.0#404-when-your-api-is-in-a-subdirectory

在你的web.xml中,你需要添加額外的servlet映射:

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

這是因爲Tomcat不支持其映射使用兩個通配符。您會注意到,在Tomcat中安裝ACF或Lucee會得到一個帶有映射爲index.cfm/*的映射的web.xml,但不幸的是,由於此限制,您無法將其更改爲/index.cfm/

在上面的xml中,您可以看到我只有1個通配符,但爲了補償,我已將整個路徑指定給index.cfm,因此只需要1個。 (請注意,我使用了/api/index.cfm,因爲它匹配我的/api/index.cfm/myResource的404示例...您的應匹配index.cfm的位置)。

+0

謝謝您的回答凱文。我應該清楚表明,我在這個領域是全新的,所以大部分答案(包括你的答案)很可能聽起來很奇怪。我們是否可以利用聊天功能實時進行討論? –

+0

歡迎您提供答案。我希望它有助於解決您的問題。 Stack Exchange站點的目的是促進社區基於共享,可見和透明的社區參與來幫助海報解決問題。如果您有更多問題,最好在Stack Overflow上公開發布,以便共享對話和答案。 –

+0

P.S.如果我的答案能夠解決您的問題,請記住將其標記爲「已接受」。謝謝! –