在ColdFusion中没有文件名的URL重定向?

时间:2011-03-21 04:58:47

标签: iis-7 coldfusion coldfusion-9

我正在尝试实现301重定向,以便将所有网址重定向到给定页面的www版本。我们的页面结构是:url.com/home/default.cfm。我试图将ColdFusion中的URL重写为当前目录而没有文件名。

我使用的代码是:

<cfif (CGI.SERVER_NAME NEQ "www.url.com")>
<!-- Save the URL (and $_GET variables too) as the string 'strUrl' -->
<!-- <cfset strUrl = CGI.script_name & "?" & CGI.query_string />-->
<cfset strUrl = CGI.script_name />
<!-- Use 301 for SEO-friendly redirects -->
<cfheader statuscode="301" statustext="Moved permanently">
<!-- Redirect to new website (this case, added www.) with strUrl added on -->
<cfheader name="Location" value="http://www.url.com#strUrl#">
</cfif>

这是如此接近,除了CGI.script_name返回带有文件名的路径。任何想法如何获得目录?请记住,我们可能有嵌套目录,例如/ foo1 / foo2 /.

感谢。

4 个答案:

答案 0 :(得分:2)

如果您打算将所有流向“domain.com”的流量重定向到“www.domain.com”,那么您最好在网络服务器级别进行此操作。网络服务器不仅会处理CF文件,还会处理静态资源,如图像,css和amp; js文件等

答案 1 :(得分:1)

您可以使用getDirectoryFromPath()执行此操作,这也将保留尾部斜杠。

<cfset strUrl = getDirectoryFromPath(cgi.SCRIPT_NAME)>

此外,您可以使用cflocation标记并指定statusCode属性来简化代码。

<cfif (CGI.SERVER_NAME NEQ "www.url.com")>
<!-- Save the URL (and $_GET variables too) as the string 'strUrl' -->
<!-- <cfset strUrl = CGI.script_name & "?" & CGI.query_string />-->
<cfset strUrl = getDirectoryFromPath(CGI.script_name) />
<!-- Use 301 for SEO-friendly redirects -->
<cflocation url="http://www.url.com#strUrl#" statusCode="301">
</cfif>

答案 2 :(得分:0)

试试这个

<cfset strUrl = listDeleteAt(cgi.SCRIPT_NAME,listLen(cgi.SCRIPT_NAME,'/'),'/') />

答案 3 :(得分:0)

或试试这个

<cfset strUrl = Replace(cgi.SCRIPT_NAME, ListLast(cgi.SCRIPT_NAME,'/'), '')>

也可以使用尾部斜杠。