2010-09-09 13 views
1

Sans avoir un rewriter url tels que ISAPI_Rewrite disponible, est-il possible d'atteindre les objectifs suivants:Puis-je avoir une URL 'conviviale' sans un réécriteur d'URL dans IIS?

Je voudrais un utilisateur à accéder http://www.jjj.com/directory/directory n'existe pas réellement. IIS transfère l'utilisateur à not-found.cfm.

A ce stade, je peux servir index.cfm, c'est-à-dire http://www.jjj.com/directory/index.cfm.

L'URL s'affichera correctement et la page se chargera même si le répertoire ou index.cfm n'existe pas. Cependant, je voudrais être en mesure de ne pas avoir index.cfm dans l'URL.

Idéal:

  1. page Demande de http://www.jjj.com/directory

  2. charge IIS not-found.cfm par défaut 404 ErrorHandler.

  3. Non trouvé supprime CGI.query_string et utilise cfswitches pour canaliser l'utilisateur vers la fonction de contrôleur appropriée. Peut utiliser onMissingTemplate?

  4. La demande de page ne change jamais dans l'URL et la page se charge de manière transparente l'utilisateur avec 200 OK état

  5. Si un utilisateur demande http://www.jjj.com/directory/index.cfm je 301 rediriger vers http://www.jjj.com/directory

actuelle:

  1. page Demande de http://www.jjj.com/directory

  2. charge IIS not-found.cfm comme gestionnaire d'erreur par défaut 404.

  3. Non trouvé supprime CGI.query_string et utilise cfswitches pour canaliser l'utilisateur vers la fonction de contrôleur appropriée.

  4. La demande des modifications à la page http://www.jjj.com/directory/index.cfm avec un statut 200 OK

+0

Dans votre flux "Actuel", à l'étape "Pas trouvé ...", faites-vous une redirection en utilisant CFLOCATION ou une autre méthode? –

+0

J'utilise une cflocation avec un statuscode de 301. J'ai joué avec cfincludes et cfheaders, mais je ne pensais pas que c'était la bonne direction. Je devrais aussi ajouter que cfincludes fonctionnait très bien, cela semblait être une mauvaise façon de le faire parce que c'était une façon de briser la demande normale. –

+0

Voici le modèle cfinclude Demande-> not-found.cfm-> Bande query_string pour trouver la requête et mettre des paires de valeurs de nom dans une variable de contexte de requête-> utiliser cfinclude et la vue utilise la variable de contexte de requête au lieu de l'URL/variables de formulaire (le cas échéant). –

Répondre

3

Vous demandez comment couper quelque chose, mais nous dire que vous n'êtes pas autorisé à utiliser un couteau ou quoi que ce soit qui ressemble à un.

Voici ma seule idée intelligente utilisant onMissingTemplate().

GET /directory/
-> 404.cfm
-><cfinclude template="#cgi.script_name#/special.cfm" />
-> feux onMissingTemplate() où vous ignorez le bit « special.cfm » et il suffit d'utiliser le reste du chemin demandé de comprendre ce contrôleur à câbler à.

Ceci est un hack kludgy, cependant, alors je voudrais essayer de l'éviter moi-même. Peut-être que si vous expliquez pourquoi ISAPI Rewriting n'est pas une option, alors nous pourrions être en mesure d'aider davantage.

+0

Adam - Militaire. Les administrateurs système ont trouvé que ISAPI ne figure pas dans leur liste de sécurité. Ce n'est pas accrédité. –

+0

Adam - # cgi.script_name # pour moi, quand je suis sur ma page 404.cfm (not-found.cfm) n'est pas-found.cfm. Le seul endroit avec les paires url et namevalue est cgi.query_string. Ce que j'ai appelé rompre la demande. Merci pour l'aide! –

+0

Ok, oui, je n'ai pas testé le code, donc vous devrez utiliser autre chose que cgi.script_name. Le principal sera le même, cependant. Concernant "Non crédité" - pouvez-vous donner plus d'informations? Je veux dire, je comprends que l'armée va établir des règles et vous n'aurez pas beaucoup de marge de manœuvre, mais cela me semble un peu déraisonnable. Vous ne pouvez pas exiger quelque chose (les formats d'URL que vous cherchez à créer) ** ET ** enlever les outils qui le rendent possible. –

1

Vous pouvez indiquer à IIS que les erreurs 404 et 403 exécutent une URL personnalisée sur votre site (par exemple, /urlhandler.cfm). Puis, vous pouvez analyser la chaîne 'cgi.query_string' et acheminer l'application de votre choix en utilisant cfinclude pour simplement inclure le 'template.cfm' correct, ou, vous pouvez reformater l'entrée attendue par votre framework, ou utiliser un projet comme http://coldcourse.riaforge.org/. Une seule note, IIS vous donnera une URL qui ressemble à ceci: «404; http://yoursite.com/the/url/you/wanted/to/route '.

1

IIS7 figure-t-il sur la liste des logiciels approuvés? Cela peut vous aider à réécrire l'URL native et à contourner le problème.

Deuxième option - mon CFM vaudou est rouillé, mais je pense que vous pouvez configurer IIS6 pour chercher une page CFM (comme vous le faites) mais ensuite intervenir au niveau de l'application et faire l'URL réécrire/rejeter avant frappe réellement la page 404. Un autre moyen de contourner le problème consiste à trouver un réécriteur d'URL ISAPI, disons sous licence MIT. Construisez votre propre copie. Demandez-leur ensuite d'installer cela dans le cadre de votre progiciel.

+0

IIS7 est approuvé et est sur la liste des choses à faire au cours de la prochaine année. Donc, ce sera «finalement» la solution. Cependant, l'année prochaine pourrait être les deux prochaines années comme vous pouvez l'imaginer. Vous proposez également un excellent travail, mais les logiciels personnalisés doivent également passer par le même canal d'approbation que les logiciels commerciaux, malheureusement. Il n'est également pas plus facile d'obtenir l'approbation. –

+0

Gotcha. Ensuite, tout pointer à travers coldfusion et ensuite gérer l'URL au niveau de l'application est le chemin à parcourir. Fait cela un peu dans les jours IIS6, cela fonctionne bien que vous pouvez vous tuer quand il s'agit de mise à l'échelle. Bonne chance. –