如果没有可用的ISAPI_Rewrite等网址重写器,是否可以实现以下目标:
我希望用户浏览到http://www.jjj.com/directory
,其中/directory
实际上并不存在。 IIS将用户转移到not-found.cfm
。
此时我可以index.cfm
发送http://www.jjj.com/directory/index.cfm
。
即使目录或index.cfm
不存在,网址也会正常显示并加载页面。但是我希望能够在网址中没有index.cfm
。
理想:
页面请求http://www.jjj.com/directory
IIS加载not-found.cfm
作为默认的404
错误处理程序。
未找到剥离CGI.query_string
并使用cfswitches
将用户引导至相应的控制器功能。可以使用onMissingTemplate
吗?
网页请求永远不会在网址中发生变化,网页会以200 OK
状态透明地加载
如果用户请求http://www.jjj.com/directory/index.cfm
,我会301
重定向到http://www.jjj.com/directory
当前:
页面请求http://www.jjj.com/directory
IIS将not-found.cfm
加载为默认的404
错误处理程序。
未找到剥离CGI.query_string
并使用cfswitches
将用户引导至相应的控制器功能。
页面请求更改为http://www.jjj.com/directory/index.cfm
状态为200 OK
答案 0 :(得分:3)
你问的是如何削减一些东西,但告诉我们你不允许使用刀子或类似的东西。
这是我使用onMissingTemplate()
唯一聪明的主意。
GET /directory/
- > 404.cfm
- &GT; <cfinclude template="#cgi.script_name#/special.cfm" />
- &GT;触发onMissingTemplate()
,忽略“special.cfm”位,只需使用所请求路径的其余部分来确定要连接的控制器。
这是一个kludgy hack,所以我会尽量避免它。也许如果您解释为什么 ISAPI重写不是一个选项,那么我们可能会进一步提供帮助。
答案 1 :(得分:1)
您可以告诉IIS有404和403错误在您的网站上执行自定义网址(例如/urlhandler.cfm)。
然后,您可以使用cfinclude解析'cgi.query_string'并路由应用程序,只需包含正确的'template.cfm',或者,您可以重新格式化您的框架所期望的输入,或者使用项目如http://coldcourse.riaforge.org/。
只需注意一下,IIS会为您提供如下所示的网址:'404; http://yoursite.com/the/url/you/wanted/to/route'。
答案 2 :(得分:1)
IIS7是否在批准的软件列表中?这可以让你重新编写原生网址并将整个问题放在一边。
第二个选项 - 我的CFM voodoo生锈了,但我认为你可以设置IIS6来寻找CFM页面(就像你正在做的那样)但是然后在应用程序级别进行操作并在它实际上进行url重写/重新创建点击404页面。
另一种方法 - 找一个ISAPI网址重写器,比如说,根据MIT许可证。建立自己的副本。然后让它们作为软件包的一部分安装。