【问题标题】:Mod Rewrite - htaccessMod重写-htaccess
【发布时间】:2009-07-17 22:57:45
【问题描述】:

菜单代码:

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

如何解决?

【问题讨论】:

  • 我不知道为什么这是个问题。是因为查询字符串作为 q=18/fghdfljkghdfl 传递吗?

标签: .htaccess mod-rewrite


【解决方案1】:

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

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

【讨论】:

  • 嗯,这就是使用这些所谓的“搜索引擎友好 URL”时的缺点,其中包含许多不需要识别资源的不必要内容。
  • 感谢修复!规范标签也是避免重复内容的简单方法。
【解决方案2】:

将 pid 的正则表达式限制为数字。有点像...

\/[0-9]+?$

那么,最后一件事必须是数值。这 ?这里几乎没有必要,但我总是倾向于匹配更少的可能性,而不是更多。当然,这个解决方案假定 pid 是一个无符号整数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多