2010-11-28 6 views
2

Total newbie at mod_rewrite.apache mod_rewrite: utiliser la base de données pour mettre à jour les règles de réécriture

Disons que je veux créer des URL agréable pour tous les fabricants sur mon site, j'ai donc www.mysite.com/samsung www.mysite.com/sony www.mysite.com/acme

fonctionne assez bien.

Cependant, si j'ai des centaines de fabricants et s'ils changent constamment, alors? Il y a quelques références vagues pour quelque chose appelé la carte de réécriture quelque part mais rien qui l'explique et aucun tutoriel. Quelqu'un peut-il aider?

En outre, pourquoi ce problème n'est-il pas le sujet principal abordé dans les tutoriels pour mod_rewrite? Comment mod_rewrite est-il utile lorsque vous devez le gérer manuellement (en supposant que vous ayez du nouveau contenu sur votre site de temps en temps)?

Il est également mentionné que vous devez avoir accès à httpd.conf Comment puis-je accéder à httpd.conf sur le serveur de mon fournisseur d'hébergement? Comment tous les autres sites font-ils cela?

Merci

Répondre

1

La façon dont cela serait généralement fait est que vous prendriez toutes les URL qui les correspondent à un modèle spécifique et route vers un fichier PHP (ou quel que soit votre langage de programmation côté serveur est) pour le routage plus complexe . Quelque chose comme ceci:

RewriteRule ^(.*)$ myroute.php?url=$1 [QSA,L] 

Ensuite, dans votre fichier myroute.php, vous pouvez inclure la logique de regarder le paramètre de chaîne de requête « url », car il contient l'URL d'origine qui est venu peut-être vous. pourrait correspondre à un fabricant dans la base de données, ou tout ce qui est nécessaire.

Cet exemple prend évidemment tous les URL et les mappe à myroute.php. Un autre exemple pourrait être quelque chose comme:

RewriteRule ^/manufacturers/(.*)$ manuf.php?name=$1 [QSA,L] 

Dans ce cas, il URLs comme ceci:

/fabricants/sony => /manuf.php?name=sony
/fabricants/samsung => /manuf.php?name=samsung
etc ...

Dans ce cas, votre fichier manuf.php pourrait rechercher la base de données en fonction du paramètre de chaîne de requête name.

+0

ok, ça ne m'est pas arrivé ... merci :) mais quoi alors? puis-je l'acheminer via l'en-tête() vers l'URL appropriée? comment puis-je conserver la jolie URL? –

+1

@ A-OK Si mod_rewrite peut utiliser une redirection "interne", l'utilisateur verra la pré-réécriture "jolie" URL. Des exemples d'où il ne peut pas être lorsque la destination est sur un hôte distinct ou lorsque vous lui avez explicitement dit d'utiliser une redirection HTTP. –

+0

Je demandais par rapport à l'exemple ci-dessus. Si réécriture redirige toutes les URL vers le fichier myroute.php qui à son tour les redirige via header() (je ne sais pas comment d'autre), quelle URL sera visible une fois que l'utilisateur arrive à la bonne page? –

2

J'ai juste trouvé cette réponse en cherchant une solution similaire - en cherchant un peu plus loin, j'ai découvert que mod_rewrite a maintenant la directive RewriteMap, qui fera exactement ce que vous voulez sans PHP ni langage de script.

Il vous permet de définir une règle de mappage avec un fichier texte, un fichier DBM, un script externe ou une requête SQL.

J'espère que cela aide!

+0

Wow, merci, c'est exactement ce dont j'avais besoin. Surtout cette ligne sur [les cartes de texte brut] (http://httpd.apache.org/docs/trunk/rewrite/rewritemap.html#txt): Ainsi, quand http://example.com/product/television est demandé, la RewriteRule est appliquée et la requête est mappée en interne à http://example.com/prods.php?id=993 – cnlevy

Questions connexes