2013-05-25 2 views
1

Je construis un site Web qui aura des catégories, et je veux y accéder via l'URL.Mod Rewrite pour les catégories illimitées

Exemple:
http://website.com/category-1/category-2

Il n'y a pas de limite au nombre de catégories qu'il pourrait y avoir, alors il pourrait y avoir 1 ou leur pourrait être 1000.

Que devrais-je faire pour effectuer une réécriture qui pourrait prendre en charge de nombreuses catégories? Je vais ensuite passer à PHP pour analyser.

Voici ce que j'ai essayé (Donne 404):

Options +FollowSymlinks 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.+)$ /category.php?params=$1 [L,QSA] 
+0

Peut-être que [cette réponse] (http://stackoverflow.com/questions/16509965/get-data-from-within-url/16512784#16512784) aidera. –

Répondre

1

Si vous préférez ne pas avoir à compter sur PHP, l'ensemble de règles suivant peut travailler pour vous:

RewriteEngine on 
RewriteRule ^([^/]+)/(.+)$ /$2?catstr[]=$1 [QSA,N] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^([^/]+)$ /category.php?catstr[]=$1&category=1 [QSA,L] 

Une brève explication:

La première règle détectera/répertoire/quoi que ce soit et rediriger vers quoi que ce soit? Catstr [] = répertoire. L'indicateur QSA le forcera à conserver les arguments de chaîne de requête, et l'indicateur N forcera rewrite_rule à rembobiner l'ensemble de règles.

La dernière règle est juste la dernière.

Ainsi, dans l'ordre, quelqu'un frapper/a/b/c/def sera lancé en interne pour (ces requêtes ne seront pas exécutés):

/b/c/def catstr [] = a

/c/def? catstr [] = b & catstr [] = a

/def? catstr [] = c & catstr [] = b & catstr [] = a

/category.php ? catstr [] = def & catstr [] = c & catstr [] = b & catstr = a & catégorie = 1

Il est utile de noter que l'ordre sera inversé. Cela peut être utilisé à votre avantage et est une fonctionnalité, pas un bug. L'exercice sur comment mettre la première règle de réécriture pour ordonner les choses de la bonne façon est laissé comme un exercice pour le lecteur.

Vous pouvez ensuite utiliser chaque segment de votre URI en utilisant le tableau $_GET['catstr'] en PHP.

+0

Je n'ai pas pensé à le faire en tant que tableau! J'aime ça! –

0

Je pense que je l'ai eu, voici ce que j'ai.

Le .htaccess:

Options +FollowSymlinks 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ /category.php?catstr=$1&category=1 [L,QSA] 

Le PHP:

<?php 
$categories = explode("/", $_GET["catstr"]); 
print_r($categories);