Pregunta

(Actualización:.. He convertido esta pregunta a un wiki de la comunidad como la respuesta parece más subjetivo que pensé que sería Hay múltiples respuestas en función de las necesidades de uno)

Si tengo una carpeta que sólo incluye Application.cfc y index.cfm, lo que es un método rápido y fiable para manejar las URL generadas dinámicamente? es decir, las direcciones URL que no tienen un archivo .cfm física correspondiente.

En este ejemplo se genera una URL 404, pero debe de búsqueda de una página en una base de datos y enviarlo a través de index.cfm:

http://www.myserver.com/cfdemo/mynewpage.cfm

¿Debo usar onMissingTemplate () en el Application.cfc para manejar el archivo que falta? Dado que este método no procesa onRequestStart (), onRequest () y onRequestEnd (), me pregunto si se debe evitar.

Como alternativa, podría configurar una regla ISAPIRewrite ya que estoy usando IIS (o mod_rewrite en Apache)

# IF the request is not /index.cfm, doesn't exist and ends in cfm or html,
# rewrite it. Pass the requested filename $1.$2 as the 1st param: cgi.page
# append the remaining url params $4 ($3 is the ?)
RewriteCond %{SCRIPT_NAME} ^(?!/index.cfm)(.*)$
RewriteCond %{REQUEST_FILENAME}     !-f
RewriteCond %{REQUEST_FILENAME}     !-d 
RewriteRule ^\/(.*)\.(cfm|html)(\??)(.*)$   /index.cfm?page=$1.$2&$4 [I,L]

Son estos métodos apropiados, o me estoy perdiendo una mejor manera de lograr este objetivo? Parece que ColdFusion debe tener este tipo de característica integrada en la Application.cfc. Tal vez estoy perdiendo.

¿Fue útil?

Solución

nada de malo en la reescritura de URL en el nivel de servidor web. Votaría por ello.

Otros consejos

Debido CF por defecto sólo se ocupa de las peticiones pcm / CFC, se puede hacer en el comienzo de Application.cfc algo como esto:

<cfif Right(cgi.SCRIPT_NAME, 9) NEQ "index.cfm">
    <!--- analyze the SCRIPT_NAME and start processing --->
</cfif>

Para otros tipos de archivos utilizando la configuración de servidor web es la única manera que puedo ver. Pero en lugar de crear reglas de reescritura se puede tratar de utilizar personalizados 404 manipuladores. Al menos cuando se utiliza IIS podrás conseguir el contexto en el cgi.QUERY_STRING, si configurar la página ficticia, digamos 404.cfm (que no necesita de existir) y poniendo siguiente comprobación < em> antes ejemplo anterior:

<!--- trap 404 requests triggered by IIS --->
<cfif right(cgi.SCRIPT_NAME, 7) EQ "404.cfm">
    <cflog file="mylogfile" text="404 error triggered by IIS. Context: #cgi.QUERY_STRING#">
</cfif>

Para Apache es posible utilizar siguiente controlador, pero no estoy seguro de si se puede extraer del contexto en este caso:

ErrorDocument 404 /404.cfm

Si usted está haciendo esto para SES URL, que les ofrecería dos consejos.

La primera es que se importan cada vez menos a medida que pasa el tiempo. Google, por ejemplo, reconoce que las direcciones URL deben incluir datos de consulta.

Segundo: CF puede manejar de forma nativa URLs SES en forma hostname / file.cfm / param1 / param2. BlogCFC , por ejemplo, las obras que el camino de rayos Camden. Es por defecto en CF8, pero necesita ser activado en CF7. No tengo mucha información útil sobre este tema, pero debe ser fácil de Google (o Bing, o lo que sea).

Si usted puede permitirlo, que iba a tratar de convertir las direcciones URL como:

http://www.myserver.com/cfdemo/mynewpage.cfm

a:

http://www.myserver.com/cfdemo/mynewpage OR
http://www.myserver.com/index.cfm/cfdemo/mynewpage

para que no pierda los métodos onRequest. El primero de ellos se puede hacer sólo en el nivel de servidor web, por lo que en Apache o IIS. El segundo se puede hacer en tan sólo ColdFusion. Ver esto: http://www.cfcdeveloper.com /index.cfm/2007/4/7/Coldfusion-SES-URL .

De lo contrario, si debe tener la .cfm al final, puede utilizar un paquete de reescritura de URL en Apache o IIS para despojar a cabo, y posteriormente enviar la solicitud a una página de pies cúbicos por minuto o hacer lo que está haciendo con onMissingTemplate. Me gustaría tratar de optar por una solución que no implique la pérdida de los métodos onRequest, pero depende de usted.

Me Sin duda alguna para la reescritura de URL. No sólo va a ser un enfoque más predecible, pero generalizada, pero reduce una cantidad significativa de carga de procesamiento de cadenas desde el servidor de la FQ. Además, se produce en el manejo CF una solicitud a un archivo real que conseguir con ello el beneficio de onapplicationstart, onrequeststart, y otros acontecimientos.

Como acotación al margen, he encontrado personalmente siempre URLs como /index.cfm/foo/bar/ para buscar unpro y hacker. Además, las direcciones URL (como / foo / bar) que no terminan, ya sea en una extensión de archivo o barra diagonal son técnicamente incorrecto (por la vieja escuela convenciones sitio estático por lo menos) y debe ser evitado, probablemente, también. También me gustaría ser curioso donde Ben Destino consigue su afirmación de que "La primera es que se importan cada vez menos a medida que pasa el tiempo. Google, por ejemplo, reconoce que las direcciones URL deben incluir datos de consulta." En mi experiencia que he hecho, encontré exactamente lo contrario para ser verdad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top