2010-09-16 31 views
0

我正在建立一個頁面管理員在PHP中,並有一個功能,讓我做其他網頁的子頁面。用遞歸函數(基於誰是誰的父母),我結束了像鏈接列表:mod_rewrite和動態目錄結構

<ul class="navList" id="navList"> 

    <li><a href="http://mysite.com/Home">Home</a></li> 
    <li><a href="http://mysite.com/About">About</a></li> 
    <li><a href="http://mysite.com/Links">Link Page</a> 

    <ul> 

     <li><a href="http://mysite.com/Links/PHP_Links">PHP Links</a></li> 
     <li><a href="http://mysite.com/Links/JQuery_Links">JQuery Links</a></li> 
     <li><a href="http://mysite.com/Links/Contributors">Contriubutors</a> 

     <ul> 

     <li><a href="http://mysite.com/Links/Contributors/Blog">Blog</a></li> 

     </ul> 

     </li> 

    </ul> 

    </li> 

    <li><a href="http://mysite.com/Portfolio">Portfolio</a></li> 

</ul> 

所以,你可以看到它可能有多個目錄結束。現在,我的問題是,我如何預測和處理這與mod_rewrite?我有一個腳本,我使用的情況下的目錄可能只是一個深層次,但任何過去的目錄將只是重新路由到主頁爲錯誤...

RewriteEngine On 
RewriteRule ^([^/.]+)/([^/.]+)$ index.php?category=$1&page=$2 [L,NC] 
RewriteRule ^([^/.]+)/$ index.php?category=$1 [L,NC] 
RewriteRule ^([^/.]+)$ index.php?page=$1 [L,NC] 

ErrorDocument 404 /index.php?page=home 
ErrorDocument 403 /index.php?page=home 

我假設這是一個邏輯問題。

想法?

回答

3

好了,所以,寫出來這裏似乎幫助。這是我做過什麼......

我改變了我的mod_rewrite的整個字符串給我

RewriteEngine On 
RewriteRule ^([^.*]+)$ index.php?page=$1 [L,NC] 

然後在我的PHP我爆炸$頁面以「/」

$dirStructure = explode('/',$page); 

所以,如果網址被鏈接/博客/想法我會得到一個數組,我可以通過排序像︰

Array 
(
[0] => Links 
[1] => Blog 
[2] => Thoughts 
) 

我可以然後只是廁所k爲我的頁面,與數組的最後一個元素相對應。

+2

+1讓PHP處理更復雜的工作,產生更可維護的系統。我通常放棄設置一個任意的GET變量,並直接使用'$ _SERVER ['REQUEST_URI']',但這是一個有趣的問題。 – Wrikken 2010-09-16 17:14:23

+0

..用適當的RewriteCond!-f&!-d當然,否則它是一個地獄的工作去實際的文件:) – Wrikken 2010-09-16 17:15:46

+0

@wrikken,我喜歡放棄任意。感謝您的輸入 :) – 2010-09-16 17:37:48

0

我認爲你必須手工完成這一點:

RewriteEngine On 
RewriteRule ^([^/.]+)/([^/.]+)/([^/.]+)$ index.php?category=$1&page=$2&subpage=$3 [L,NC] 
RewriteRule ^([^/.]+)/([^/.]+)$ index.php?category=$1&page=$2 [L,NC] 
RewriteRule ^([^/.]+)/$ index.php?category=$1 [L,NC] 
RewriteRule ^([^/.]+)$ index.php?page=$1 [L,NC]