Question

(Mise à jour:.. Je me suis converti cette question à un wiki communautaire comme la réponse semble plus subjective que ce que je pensais que ce serait Il y a plusieurs réponses selon ses besoins)

Si j'ai un dossier qui ne comprend que application.cfc et index.cfm, ce qui est une méthode rapide et fiable pour gérer les URL générées dynamiquement? à savoir les URL qui ne disposent pas d'un fichier .cfm physique correspondant.

Cet exemple génère une URL 404, mais il doit rechercher une page dans un db et le retourner par index.cfm:

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

Dois-je utiliser onMissingTemplate () dans le application.cfc pour gérer le fichier manquant? Étant donné que cette méthode ne traite pas onRequestStart (), onRequest () et onRequestEnd (), je me demande si elle doit être évitée.

Sinon, je pourrais configurer une règle de ISAPIRewrite depuis que je suis en utilisant IIS (ou mod_rewrite sur 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]

sont ces méthodes appropriées, ou suis-je manque une meilleure façon d'atteindre cet objectif? Il semble que Coldfusion devrait avoir ce type de fonctionnalité intégrée dans le application.cfc. Peut-être que je suis juste le manquer.

Était-ce utile?

La solution

rien de mal avec réécriture d'URL au niveau du serveur web. Je voterais pour cela.

Autres conseils

Parce que CF par défaut ne traite que les demandes cfm / cfc, vous pouvez le faire au début de Application.cfc quelque chose comme ceci:

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

Pour les autres types de fichiers en utilisant la configuration serveur Web est la seule façon que je peux voir. Mais au lieu de créer des règles de réécriture, vous pouvez essayer d'utiliser sur mesure 404 gestionnaires. Au moins lorsque vous utilisez IIS, vous serez en mesure d'obtenir le contexte dans cgi.QUERY_STRING, se mettre en place la page factice, par exemple 404.cfm (il n'a pas besoin d'exister) et mettre vérification suivante < em> avant exemple précédent:

<!--- 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>

Pour Apache, il est possible d'utiliser la suite gestionnaire, mais je ne sais pas si vous pouvez extraire le contexte dans ce cas:

ErrorDocument 404 /404.cfm

Si vous faites cela pour SES URL, je vous offre deux conseils.

La première est qu'ils ont de moins en moins au fil du temps. Google, par exemple, reconnaît que les URL doivent inclure des données de la requête.

Deuxième: CF peut nativement gérer les URL SES dans le nom d'hôte de forme / file.cfm / param1 / param2. Ray Camden BlogCFC , par exemple, fonctionne de cette façon. Il est activé par défaut dans CF8, mais doit être activé dans CF7. Je n'ai pas beaucoup d'informations à portée de main à ce sujet, mais il devrait être facile à Google (ou Bing, ou autre).

Si vous pouvez l'autoriser, je vais essayer de convertir les URL comme:

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

à:

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

de sorte que vous ne perdez pas les méthodes de onRequest. Le premier peut se faire seulement au niveau du serveur web, donc dans Apache ou IIS. Le second peut être fait en seulement ColdFusion. Voir ceci: http://www.cfcdeveloper.com /index.cfm/2007/4/7/Coldfusion-SES-URL .

Dans le cas contraire, si vous devez avoir le .cfm à la fin, vous pouvez utiliser un package de réécriture d'URL dans Apache ou IIS pour dépouiller et ensuite transmettre la demande à une page cfm ou faire ce que vous faites avec onMissingTemplate. Je vais essayer d'opter pour une solution qui n'implique pas perdre les méthodes de onRequest, mais à vous.

Je vais certainement pour la réécriture d'URL. il sera non seulement une approche plus prévisible, mais généralisée, mais il réduit une quantité importante de la charge de l'analyse de chaîne à partir du serveur CF. De plus, il en résulte dans le traitement CF une requête à un fichier réel ainsi vous obtenir le bénéfice de onapplicationstart, onrequeststart, et d'autres événements.

En aparté, j'ai personnellement toujours trouvé des URL comme /index.cfm/foo/bar/ à regarder et non rentables hackish. De plus, les URL (comme / foo / bar) qui ne se termine pas par soit une extension de fichier ou slash sont techniquement incorrectes (par la vieille école conventions de site statique à tout le moins) et doit être évité sans doute aussi. Je serais également curieux où Ben Doom obtient son affirmation selon laquelle « La première est qu'ils ont de moins en moins au fil du temps. Google, par exemple, reconnaît que les URL doivent inclure des données de la requête. » Dans mon expérience, je l'ai trouvé en fait exactement le contraire pour être vrai.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top