Мод переписать - htaccess - PullRequest
       11

Мод переписать - htaccess

0 голосов
/ 17 июля 2009

Код меню:

<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/

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

Ответы [ 2 ]

2 голосов
/ 17 июля 2009

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

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

0 голосов
/ 17 июля 2009

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

\/[0-9]+?$

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

...