2009-07-17 71 views
0

菜单代码:现代重写 - 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

我不知道为什么这是一个问题。是否因为querystring被传递为q = 18/fghdfljkghdfl? – 2009-07-17 14:56:15

回答

2

您必须检查ID后面的属性是否与PHP中的类别直接对应,如果不是,则会抛出404(因此搜索引擎不会索引错误的URL)。

没有办法直接在.htaccess中检查它,除非您生成它并为每个类别使用一个RewriteRule。

+0

那么,当使用这些所谓的“搜索引擎友好网址”时,这是不利的,因为它有很多不必要的东西在识别资源。 – Gumbo 2009-07-17 15:02:06

0

将pid的正则表达式仅限于数字。像...

\/[0-9]+?$ 

然后,最后一件事情是一个数值。这个?在这里几乎是不必要的,但我总是在匹配较少可能性的方面犯错,而不是更多。当然,这个解决方案假定pid是一个无符号整数。