我正在"重命名"我正在处理的项目的现有文件.为了保持向后兼容性,我将保留cfm文件以将用户重定向到新用户.
为了尽可能保持一切清洁,我想在用户试图去buy.cfm时发送301状态码响应.
我知道我可以使用cflocation与statuscode属性
<cflocation url="shop.cfm" statuscode="301" addtoken="false">
Run Code Online (Sandbox Code Playgroud)
或者我可以使用cfheader标签.
<cfheader statuscode="301" statustext="Moved permanently">
<cfheader name="Location" value="http://www.mysite.com/shop.cfm">
Run Code Online (Sandbox Code Playgroud)
是否有任何理由使用一种方法而不是另一种方法?
我正在开发一个在URL的文件夹名称中使用UTF-8字符的系统.导航到这些URL没有问题,一切都按预期工作 - 除非在网站上发布重定向到另一个页面; 因此浏览器似乎编码扩展字符.
举个例子,我试图重定向到以下相对URL:
/geschäft/käfer/
Run Code Online (Sandbox Code Playgroud)
如果我直接在地址栏中访问该URL,则没有问题.但是,如果我更改位置标题以将浏览器重定向到此URL,则最终会:
/gesch%E4ft/k%E4fer/
Run Code Online (Sandbox Code Playgroud)
如果我查看原始页面的响应标题(它是301重定向到翻译的内容),我可以看到这个条目:
Location:/geschäft/käfer/
Run Code Online (Sandbox Code Playgroud)
似乎正确的细节在标题中结束,但浏览器的地址栏显示上面详述的%E4的编码值.我尝试了各种方法将URL输入到位置标题中,但所有方法都得到了相同的结果.
我在Chrome 37.0.2062.120 m和Firefox 32.0.2上看到了这种行为.
这是在一个开发盒上运行,Windows 7 Home with IIS7.5
编辑:
似乎这个问题可能与ColdFusion直接相关.如果我使用Javascript重定向到网址,这可行......但需要注意的是文件必须与BOM一起保存.如果我使用cflocation,或者如果我使用pagecontext手动插入标题,则无论是否存在BOM,问题都会持续存在.
我还注意到使用的类似问题,cfinclude除非使用BOM保存调用模板,否则这些扩展字符显示不正确.
有没有什么好的理由为什么这个标签的默认值是肯定的?似乎应该几乎总是不行.我错过了什么?
有没有办法通过使用CFLocation将用户重定向到新窗口?据我所知,你不能target=_blank在CFLocation中使用.还有另一种方法吗?
这是我的代码:
<cfif cgi.PATH_INFO eq "/procedure-page.cfm">
<cflocation url="http://www.example.com/example/example.cfm?id=XXXXXX&contactid=#returnStruct.contactID#&doctorid=#officeLocation#" addtoken="no" >
<cfelse>
<cflocation url="http://www.example.com/example/example.cfm?id=#example#&contactid=#returnStruct.contactID#&doctorid=#officeLocation#" addtoken="no" >
</cfif>
Run Code Online (Sandbox Code Playgroud) 我经常以下列方式设计逐步流程(即购物车):
<CFLOCATION />.我的问题是,这是正确使用的<CFLOCATION />吗?看一下这个标签的定义,它似乎应该用于实际的"移动文件",考虑到它默认发送一个HTTP标头响应代码,并允许你输入另一个,如果需要的话.
在我的情况下,没有"移动的文件",我只是想在用户完成任务后将用户发送到另一个页面.如果有人要查看IIS日志,可能会产生误导,看到一堆301.
我只是在这里寻找最佳实践原则,假设我不能重新设计使用AJAX的整个过程.