2010-12-01 13 views
0

Je voudrais savoir s'il y a un moyen plus facile autre que Mod Rewrite (en utilisant le cadre de fusebox ou directement dans Coldfusion) pour convertir une URL comme suit:Url conviviale au format 'mydomain.com/username' sans Mod Rewrite?

de:

http://www.somedomain.com/salmahayek 
or 
http://localhost/someApp/salmahayek 

à:

http://www.somedomain.com/index.cfm?action=profile.view&name=salmahayek 
or 
http://localhost/someApp/index.cfm?action=profile.view&name=salmahayek 

Mon application est une application Fusebox 5.5 existante.

Je dois juste ajouter que l'adresse ci-dessus n'est pas statique, c'est-à-dire que "salmahayek" pourrait être n'importe quel nom.

Toute aide serait grandement apprécié Merci

Répondre

1

Vous pouvez éventuellement utiliser la voie « classique » de le faire (pas sûr si Fusebox interférera), en utilisant un gestionnaire 404, quelque chose comme ça devrait faire l'affaire:

  1. Configurez un serveur 404 sur votre serveur, par ex. en .htaccess:

    ErrorDocument 404 /404handler.cfm

  2. mis en place 404handler.cfm à enrouler autour du cadre, par exemple:

 
    <cfset variables.checksok = false> 
    <!--- do some checks - example ---> 
    <cfif cgi.REDIRECT_URL EQ 'salmahayek'> 
     <cfset variables.checksok = true> 
    </cfif> 
    <cfif variables.checksok EQ true> 
     <cfheader statuscode="200" statustext="OK"> 
     <cfset url.action = "profile.view"> 
     <cfset url.name = cgi.REDIRECT_URL> 
     <cfinclude template="index.cfm"> 
    </cfif> 

(non testé, mais devrait fonctionner)

+0

IIS supportera le même. C'est un hack mais ça n'échouera pas. –

+0

Salut - Désolé - Je voulais ajouter que l'URL ci-dessus n'est pas statique, c'est-à-dire "salmahayek" pourrait être n'importe quel nom, de sorte que l'entrée codée en dur ne fonctionnerait probablement pas. – Cheeky

+0

Cheeky - selon le commentaire de coldfusion, c'était juste un exemple, vous voudrez probablement le remplacer par un meilleur contrôle, par exemple. S'assurer qu'il existe dans la base de données ou plus, plutôt que d'envoyer aveuglément tout ce qui 404 à travers l'action profile.view. – Ben

0

Je ne suis pas sûr de quelqu'un d'autre, mais je ne comprends pas pourquoi Mod Rewrite serait difficile, sauf si vous êtes sur IIS. Une règle de réécriture serait tout simplement être quelque chose comme:

^(login|register)/([^/\.]+) index.cfm?action=profile.$1&step=$2 [L] 
^([^/\.]+)/?$ index.cfm?action=profile.view&name=$1 

je mets quelques exemples supplémentaires pour vérifier si l'utilisateur est en train d'essayer d'obtenir à l'enregistrement ou la page de connexion et quelle étape ils sont là-bas.

0

Je l'ai déjà fait en utilisant la méthode onMissingTemplate() d'Application.cfc. vous pouvez soit faire des expressions rationnelles contre la page arguments.target qui est passée ou faire une recherche dans une base de données. de toute façon, vous feriez une cflocation à la bonne page par la suite. N'oubliez pas de passer outre les paramètres d'URL. Une chose que je n'ai jamais essayé et je me demandais souvent si cela pourrait être traité dans la méthode onRequestStart() à la place? Le plus gros problème que j'ai avec l'utilisation de onMissingTemplate() est que vous faites un cflocation qui est une toute nouvelle requête et vous ne pouvez pas passer à travers les variables de formulaire. oui je sais que vous pourriez probablement utiliser GetPageContext(). Forward (strUrl) à la place, mais vous allez toujours jeter le cycle de vie de la demande entière pour la demande d'origine. en faisant cela dans onRequestStart(), vous éviterez cela.

quelqu'un veut tester cela?

1

Je l'ai fait quelques comme ça dans une de mes applications actuellement, mais en PHP:

http://localhost/index.cfm/profile.view/salmahayek/

<cfset urlArgs=listToArray(CGI.PATH_INFO, "/") /> 
<cfset action=urlArgs[1] /> 
<cfset name=urlArgs[2] /> 

Cela fonctionne parfaitement, mais vous devez mettre en place avec la « index.cfm » si vous ne voulez pas réécrire.