URL de référencement avec le contrôleur ColdFusion?

ref rapide: area = page type de portail.

J’aimerais que les anciennes URL http://domain.com/long/rubbish/url/blah/blah/index.cfm?id=12345 redirigent vers http://domain.com/area/12345-short-title

http://domain.com/area/12345-short-title devrait afficher le contenu.

J’ai travaillé jusqu’à présent pour faire cela, je pourrais utiliser Apache pour écrire toutes les URL à

http://domain.com/ index.cfm /long/rubbish/url/blah/blah/index.cfm?id=12345 et http://domain.com/ index.cfm / area / 12345-short-title

Index.cfm servira soit à gérer le contenu, soit à appliquer une redirection permanente, mais il faudra d’abord obtenir les informations sur le titre et la zone de la firebase database.

Il y a 50 000 pages sur ce site. J’ai également d’autres idées pour les redirections de sous-domaines et les sous-domaines permanents et le contrôle de la manière dont ils agissent via index.cfm.

L’infrastructure tient à faire autant de choses que possible grâce à la réécriture d’Apache, nous pensons qu’elle serait plus rapide. Cependant, je ne suis pas sûr que nous ayons ce choix si nous devons obtenir les informations de zone et de titre pour chaque page.

Quelqu’un at-il une expérience avec cela qui peut fournir une consortingbution?

Quelque chose à noter, je suppose que nous devrons conserver toutes les URL internes utilisées sur le site Web dans l’ancien format. Ce serait un méga travail de tout changer.

Cela signifie que toutes les URL internes devront utiliser une redirection permanente à chaque fois.

Plutôt que de redirect les deux groupes d’URL vers le même script, pourquoi ne pas simplement les envoyer à deux scripts distincts?

Tout simplement comme ceci:

RewriteCond ${REQUEST_URI} !-f RewriteRule ^\w+/\d+-[\w-]+$ /content.cfm/$0 [L] RewriteCond ${REQUEST_URI} !-f RewriteRule ^.* /redirect.cfm/$0 [L,QSA] 

Ensuite, redirect.cfm peut rechercher l’URL de remplacement et effectuer la redirection 301, tandis que content.cfm sert simplement le contenu.

(Vous n’avez pas spécifié comment votre CF est configuré; vous devrez peut-être mettre à jour la configuration Jrun / Tomcat / autre pour prendre en charge /content.cfm/* et /redirect.cfm/* – cela sera fait comme il a été fait pour index.cfm)

Pour des raisons de performances, vous souhaitez toujours éviter les redirections de la firebase database si vous le pouvez, et vous pouvez le faire en générant des règles de réécriture pour chaque page effectuant la redirection 301 du côté Apache. Cela peut être aussi simple que d’append une ligne au fichier .htaccess, comme ceci:

   

(Où OldUrl et NewUrl ont été recherchés dans la firebase database.)

Vous pourriez aussi vouloir utiliser la redirection mod_alias au lieu de la commande mod_rewrite RewriteRule, où la syntaxe serait la suivante: Redirect permanent #OldUrl# #NewUrl# – puisque la OldUrl est une correspondance exacte, elle serait probablement plus rapide.

Notez que ces règles devront être vérifiées avant que la redirection redirect.cfm ci-dessus soit effectuée – si elles sont dans le même fichier .htaccess, vous ne pouvez pas simplement faire une append, mais si elles se trouvent dans les fichiers de configuration Apache généraux du site. Les règles d’access seront vérifiées en premier.

De plus, selon le commentaire de Sharon, vous devriez vérifier si votre Apache gérera les règles 50k – alors que je l’ai vu rapporter que des “milliers” de réécritures Apache basées sur les regex sont parfaitement correctes, besoin de séparer plusieurs fichiers).

Utiliser des réécritures Apache ne serait plus rapide que si elles étaient des réécritures statiques ou si elles suivaient toutes une règle que vous pourriez écrire dans une regex dans le fichier .htaccess. Si vous devez toucher la firebase database pour ces redirections, il est alors inutile de le faire dans .htaccess.

Une autre approche est celle utilisée par la plupart des CMS pour gérer les répertoires et les redirections virtuels. Un fichier index.cfm à la racine du site gère toutes les requêtes entrantes et renvoie les pages et les chemins corrects. MURA CMS utilise cette approche (ainsi que Joomla et la plupart des autres).

Fondamentalement, vous utilisez la variable CGI.path_info sur une requête entrante, en la recherchant dans votre firebase database et en effectuant une redirection vers le nouveau chemin. Comme d’habitude, Ben Nadel a bien écrit sur l’utilisation de cette approche: Ben Nadel: Utilisation de la réécriture d’URL et de CGI.PATH_INFO avec IIS MOD-Rewrite

Vous pouvez, cependant, utiliser le .htaccess pour supprimer le “index.cfm” de la chaîne d’URL si vous le souhaitez en redirigeant toutes les requêtes entrantes vers l’URL racine avec quelque chose qui ressemble à ceci dans votre .htaccess:

 RewriteEngine On RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d RewriteRule ^([a-zA-Z0-9-]{1,})/([a-zA-Z0-9/-]+)$ /$1/index.cfm/$2 [PT] 

Fondamentalement, cela redirectait quelque chose comme http://www.yourdomain.com/your-new-url/ vers http://www.yourdomain.com/index.cfm/your-new-url/ où il pourrait être traité comme décrit par le blog ci-dessus. L’utilisateur ne verrait jamais l’index.cfm.