2011-03-21 45 views
0

我試圖實現301重定向,使我的所有URL都重定向到給定頁面的www版本。我們的頁面結構是:url.com/home/default.cfm。我正嘗試將ColdFusion中的URL重寫爲當前目錄,而不使用文件名。在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

試試這個

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

0

或者試試這個

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

有結尾的斜線爲好。

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

如果你的目的是要重定向所有流量將「domain.com」到「www.domain.com」,你可能會更好的網絡服務器級別這樣做。網絡服務器不僅會處理CF文件,還會處理靜態資源,如圖像,cs & js文件等。

+0

+1非CF資源會發生什麼情況?如果可用,讓Web服務器處理這些東西。 – jfrobishow 2011-03-23 14:36:19

+0

是的,這將是我的偏好,但不幸的是我們的技術設置不允許這樣 - 我們在一個大型公司,這使我們的服務器級別訪問變得複雜。另外,我們這樣做的主要原因是爲了防止在Google中重複索引頁面(這是以前的一個問題,我們有非WWW和WWW版本索引)。 – Rich 2011-03-24 04:36:11

+0

如果您正在專門爲Google索引做這件事,您可以查看Google針對網站管理員的「首選域名」說明。請參閱[link] http://www.google.com/support/webmasters/bin/answer.py?answer=44231 – 2011-07-06 20:24:19