我正在尝试实现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 /.
感谢。
答案 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,'/'), '')>
也可以使用尾部斜杠。