0

我正在尝试实现 301 重定向,以便我的所有 URL 都重定向到给定页面的 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

4 回答 4

2

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

于 2011-03-21T14:19:41.570 回答
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>
于 2011-03-21T13:04:44.097 回答
0

尝试这个

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

于 2011-03-21T06:05:59.217 回答
0

或者试试这个

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

也有尾部斜杠。

于 2011-03-21T11:46:12.867 回答