2010-09-16 65 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]