2009-07-17 2 views
0

код Меню: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> 

Текущий мод работает нормально на /category/18/cat-name-level/cat-name-level2/

  • Вот мой .htaccess:

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

Проблема, мы может ввести что-либо после ID:

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

Как это исправить?

+0

Я не уверен, почему это проблема. Это потому, что запрос выполняется как q = 18/fghdfljkghdfl? –

ответ

2

Вам нужно будет проверить, соответствуют ли атрибуты после идентификатора категории непосредственно в PHP, и выкидывают 404, если они этого не делают (поэтому поисковые системы не будут индексировать ошибочные URL-адреса).

Невозможно проверить это непосредственно в .htaccess, если только вы не сгенерируете его и не используете один RewriteRule для каждой категории.

+0

Ну, это недостаток при использовании этих так называемых «дружественных поисковых систем URL» с большим количеством ненужных вещей, которые не нужны для идентификации ресурса. – Gumbo

+0

спасибо исправлено! Canonical Tag также является простым способом избежать дублирования контента. – wow

0

Ограничить регулярное выражение для pid только номерами. Что-то вроде ...

\/[0-9]+?$ 

Тогда последнее, что должно быть числовым значением. ? здесь почти не нужно, но я всегда ошибаюсь на стороне соответствия меньшим возможностям, а не больше. Это решение предполагает, что pid - целое число без знака, конечно.

Смежные вопросы