2009-07-17 76 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是一個無符號整數。