2014-05-05 3 views
-1

J'ai fait preuve de diligence raisonnable, passé des heures à fouiller dans les recherches et à accumuler de l'assurance qualité. Pas de dé. Donc, je viens finalement ici pour demander de l'aide.Propre URL avec htaccess et PHP

  • Apache HTTP Server
  • PHP 5,3

Je urls sale:

.cc/store/index.php?route=checkout/cart 
.cc/store/index.php?route=common/home 
.cc/store/index.php?route=product/product&product_id=111 

Je voudrais les nettoyer alors quand un utilisateur clique sur un lien ou sale types une url sale ils obtiennent une url propre dans la barre d'adresse:

.cc/store/cart 
.cc/store/home 
.cc/store/product/11 

Actuellement, j'ai mon fichier htaccess dans:

.cc/store/.htaccess 

Je sais que je dois en htaccess:

RewriteEngine On 

Mais est-ce le bon chemin ?:

RewriteRule !/index.php?route=(A-Z)/(A-Z)&(*)$ /$2/$3 

Q1: Dois-je besoin de simplement modifier le fichier htaccess ou devrais-je aussi écrire un peu de php?

Q2: Quel est le code htaccess/php que j'écris pour obtenir les URL propres souhaitées? Je veux voir les URLs propres dans la barre d'adresse de mon navigateur.

Merci d'avance.

Répondre

0

Ce:

RewriteRule !/index.php?route=(A-Z)/(A-Z)&(*)$ /$2/$3 

est-ce pas ce que vous voulez. Vous allez avoir besoin de deux types de règles, celles qui redirigent le navigateur vers l'URL que vous voulez voir, puis celles qui réécrivent en interne à l'URL que votre système peut comprendre (les "sales"). Donc, quelque chose comme:

RewriteEngine On 
RewriteBase /store/ 

RewriteCond %{THE_REQUEST} \ /+store/index\.php\?route=checkout/cart 
RewriteRule^/store/cart? [L,R] 

RewriteCond %{THE_REQUEST} \ /+store/index\.php\?route=common/home 
RewriteRule^/store/home? [L,R] 

RewriteCond %{THE_REQUEST} \ /+store/index\.php\?route=product/product&product_id=([^&\ ]+) 
RewriteRule^/store/product/%1? [L,R] 

RewriteRule ^cart$ index.php?route=checkout/cart [L,QSA] 
RewriteRule ^home$ index.php?route=common/home [L,QSA] 
RewriteRule ^product/(.+)$ index.php?route=product/product&product_id=$1 [L,QSA] 

Vous ne pouvez pas le faire « joker » comme correspondant parce que vous changez quelque chose comme « X/Y » juste « Y », ce qui signifie que lorsque vous repassez en interne en arrière, la La partie "X" est perdue pour toujours.

+0

Ça a marché! Je vais étendre cette syntaxe aux autres pages pour le nettoyage de l'URL. Le concept de redirection externe/interne a également du sens! Merci beaucoup! – openyk

1

Tout ce qui génère ces URL, que ce soit PHP ou HTML simple, devra être mis à jour pour contenir les nouvelles URL. mod_rewrite prend simplement l'url "Clean" et la traduit en "sale" d'origine pour que votre code original puisse encore fonctionner, avec les mêmes paramètres.

+1

En fait, ce n'est pas vrai: vous pouvez utiliser le module de réécriture à cette fin en effectuant des redirections externes. Bien que je suis d'accord que le plus probable ne cherche pas une telle solution. – arkascha

+0

Ah donc une méthode alternative est d'éditer le générateur de liens (en html/php) pour faire des URLs propres, alors l'utilisateur verrait ces URLs propres tandis que htaccess transformerait l'URL propre en une URL sale pour le serveur le processus (ie. les sorties du serveur nettoient l'url, l'utilisateur voit l'url propre, l'URL du serveur sale, l'URL du serveur sale). Cool! – openyk