2009-08-05 9 views
0

J'essaie de faire quelque chose avec .htaccess que je ne suis pas sûr que l'on puisse faire.htaccess masque URL dynamique avec une URL statique

La première chose que je l'ai fait est cacher les extensions .php en utilisant le code suivant:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

Fonctionne très bien.

Maintenant ce que je suis en train de faire et ne peut pas sembler figurer dehors est la suivante:

Lorsqu'un utilisateur tape « mywebsite.com/products?id=12345 » dans la barre d'adresse du navigateur, je voulez que le serveur serve la bonne page de produit en fonction de l'ID, mais l'affiche dans la barre d'adresse sous le nom "mywebsite.com/product", quel que soit l'identifiant du produit.

Est-ce possible? Si oui comment?

Merci

+0

Voulez-vous rediriger vers mywebsite.com/product? Ou voulez-vous juste pouvoir utiliser/products? Id = 12345? – rpjohnst

+0

Je ne veux pas rediriger, je veux que le serveur serve la page comme "/ products? Id = 12345" mais pour montrer l'URL dans la barre d'adresse du navigateur comme "/ produits", peu importe l'ID du produit. – Enkay

Répondre

0

Ce n'est pas vraiment possible d'une manière propre. Pour changer la barre d'adresse, vous devez envoyer une redirection HTTP réelle. Cela signifie que vous recevrez une nouvelle demande du navigateur avec tout ce que vous avez redirigé vers, et ainsi sur cette deuxième demande, vous n'aurez plus l'ID du produit.

Il y a deux façons dont vous pouvez contourner cela:

  • rendre votre serveur stateful
  • magasin le produit dans un cookie

Les deux sont de mauvaises idées.

Pourquoi voulez-vous faire cela de toute façon? Voulez-vous vous assurer que vos utilisateurs ne peuvent pas mettre en signet vos produits? Cela semble assez user-hostile.

+0

En fait, j'ai simplifié le problème dans le but de poser ma question. La page produit utilise un système de filtrage dynamique qui affiche uniquement la combinaison d'options actuellement en stock. La page de résultats ressemble à quelque chose comme "products? Color = red & category = 456". Je ne veux pas que les gens puissent mettre en signet une recherche spécifique au cas où la combinaison d'options n'est plus en stock, ils obtiendront une page de résultats vide. S'il n'y a aucun moyen de le faire avec htaccess, je pourrais changer le système de filtrage pour utiliser les sessions php pour masquer les choix du client au lieu d'utiliser des variables d'URL. – Enkay

0

J'ai fini par utiliser ajax et sessions pour rendre le processus de filtrage transparent pour l'utilisateur. Je suppose que ce que j'essayais de faire n'était pas possible avec un fichier htacess. Merci quand même!

Questions connexes