2013-01-23 14 views
8

Sto "rinominando" un file esistente per un progetto su cui sto lavorando. Per mantenere la retrocompatibilità, sto lasciando un file cfm in atto per reindirizzare gli utenti a quello nuovo.cflocation vs cfheader per reindirizzamenti 301

  • buy.cfm: vecchio
  • shop.cfm: nuova

Al fine di tenere tutto il più pulito possibile, voglio inviare la risposta 301 statuscode se un utente tenta di andare a buy.cfm.

So che posso utilizzare cflocation con l'attributo di statuscode

<cflocation url="shop.cfm" statuscode="301" addtoken="false"> 

o posso utilizzare i tag cfheader.

<cfheader statuscode="301" statustext="Moved permanently"> 
<cfheader name="Location" value="http://www.mysite.com/shop.cfm"> 

Ci sono delle ragioni per usare un metodo rispetto all'altro?

risposta

11

Penso che fanno la stessa cosa, con <cflocation> essere più leggibile

+1

D'accordo con Henry. La versione 'cfheader' è semplicemente una versione manuale di ciò che' cflocation' fa per te. –

+3

OK, facendo un po 'più di lettura, sembra che l'attributo 'statuscode' non sia stato aggiunto fino a CF8, quindi l'cfheader era in precedenza l'unico modo per restituire lo statuscode in modo specifico. –

+1

FYI - il codice di stato di cflocation accetta solo valori compresi tra 300 e 307. Pertanto, ad esempio, ad es., è necessario restituire il percorso di una risorsa appena creata insieme a un codice di stato 201 che è necessario utilizzare cfheader. –

4

ho provato questo su ColdFusion 9.

C'è una grande differenza, ed è che cflocation arresta l'esecuzione del pagina e quindi reindirizza alla risorsa specificata.

Dal Adobe ColdFusion documentation:

Interrompe l'esecuzione della pagina corrente e si apre una pagina di ColdFusion o file HTML.

Così si avrebbe bisogno di fare questo:

<cfheader statuscode="301" statustext="Moved permanently"> 
<cfheader name="Location" value="http://www.example.com/shop.cfm"> 
<cfabort> 

per ottenere l'equivalente di questo:

<cflocation url="shop.cfm" statuscode="301" addtoken="false"> 

In caso contrario, si rischia di incorrere in problemi se altro codice viene eseguito dopo il tag cfheader . Mi sono imbattuto in questo quando ho sistemato del codice in cui i reindirizzamenti sono stati inseriti in un file application.cfm - usando cfheader - senza interrompere il resto dell'elaborazione della pagina.

Ho anche notato, nelle intestazioni di risposta, che cflocation imposta anche le seguenti intestazioni di conseguenza:

Cache-Control: no-cache 
Pragma: no-cache 

Si potrebbe voler aggiungere queste intestazioni in se si utilizza il tag cfheader con la posizione, se necessario:

<cfheader name="Cache-Control" value="no-cache"> 
<cfheader name="Pragma" value="no-cache"> 
Problemi correlati