2009-07-17 9 views
0

Code Menu:Mod Rewrite - htaccess

<a href="/category/<?=$cat_name['id']?>/<?=simpleURI($cat_name['catname'])?>/" title="<?=ucfirst($cat_name['catname']); ?>">Level 1</a> 

<a href="/category/<?=$subcat_name['id']?>/<?=simpleURI($cat_name['catname'])?>/<?=simpleURI($subcat_name['catname'])?>/" title="<?=ucfirst($subcat_name['catname']); ?>">Level 2</a> 

<a href="/category/<?=$subcat_name1['id']?>/<?=simpleURI($cat_name['catname'])?>/<?=simpleURI($subcat_name['catname'])?>/<?=simpleURI($subcat_name1['catname'])?>/" title="<?=ucfirst($subcat_name1['catname']); ?>">Level 3</a> 

<a href="/category/<?=$subcat_name2['id']?>/<?=simpleURI($cat_name['catname'])?>/<?=simpleURI($subcat_name['catname'])?>/<?=simpleURI($subcat_name1['catname'])?>`/<?=simpleURI($subcat_name2['catname'])?>/" title="<?=ucfirst($subcat_name2['catname']); ?>">Level 4</a> 

fin de travail mod actuel sur /category/18/cat-name-level/cat-name-level2/

  • Voici mon .htaccess:

    RewriteRule ^category/([0-9]+)(?:/([^/]+)(?:/([^/]+))?)(?:/([^/]+)(?:/([^/]+))?)?/$ ./category.php?pid=$1 [QSA,L] 
    

Le problème, nous peut taper n'importe quoi après l'ID:

  • /category/18/yehahh/jsidfd/
  • /category/18/jkasjksd/dhgidg/ondsg/djgn/

Comment résoudre ce problème?

+0

Je ne sais pas pourquoi c'est un problème. Est-ce parce que la chaîne de requête est passée à q = 18/fghdfljkghdfl? –

Répondre

2

Vous devrez vérifier que les attributs après l'ID correspondent directement à la catégorie en PHP, et lancer un 404 s'ils ne le font pas (donc les moteurs de recherche n'indexeront pas les URL défectueuses).

Il n'y a aucun moyen de vérifier cela directement dans le fichier .htaccess, sauf si vous le générez et utilisez une RewriteRule pour chaque catégorie.

+0

Eh bien, c'est l'inconvénient lors de l'utilisation de ce que l'on appelle "URL de moteur de recherche" avec beaucoup de choses inutiles dans ce qui n'est pas nécessaire pour identifier la ressource. – Gumbo

+0

merci fixé! Canonical Tag également moyen simple d'éviter un contenu en double. – wow

0

Restreindre l'expression rationnelle pour le pid à des nombres simples. Quelque chose comme ...

\/[0-9]+?$ 

Ensuite, la dernière chose doit être une valeur numérique. Le ? est presque inutile ici, mais je me trompe toujours sur le fait de faire correspondre moins de possibilités, plutôt que de plus. Cette solution suppose que pid est un entier non signé, bien sûr.