.htaccess与动态php - 子文件夹问题

时间:2009-07-23 10:27:58

标签: php apache .htaccess mod-rewrite subdirectory

必要的知识

我的.htaccess文件重定向如下: domain.com/about到domain.com/index.php?page=about

RewriteRule ^([^/.]+)/?$ index.php?page=$1 [L]

“page”变量用于php include:

<?php include_once($_SERVER['DOCUMENT_ROOT']."/contents/".$page.".html"); ?>

“contents”文件夹只包含作为内容包含的.html文件

好的,这就是问题:

我在“contents”文件夹中有一个“子文件夹”,其中包含我需要访问的其他.html文件 现在我正试图像这样重定向: domain.com/subfolder/about到domain.com/index.php?page=subfolder/about

这有效:

RewriteRule ^([^/.]+/[^/.]+)/?$ index.php?page=$1

但是现在我无法从以下网址访问子文件夹:domain.com/subfolder/因为有一个'page'变量

<?php $page = $_GET['page']; if(!$page) { $page = 'index'; } ?>

任何想法,想法或帮助将不胜感激。

提前致谢

4 个答案:

答案 0 :(得分:2)

有了这个,您不必定义任何目录名称 - 它将它们全部排除在外。

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/.]+/[^/.]+)/?$ index.php?page=$1

你可能需要测试尾部斜杠,它可以在/子文件夹/但不在/子文件夹

上工作

答案 1 :(得分:0)

您可以通过

排除特定文件夹
rewritecond %{REQUEST_URI}!^/folder1/  
rewritecond %{REQUEST_URI}!^/folder2/  
RewriteRule ^([^/.]+/[^/.]+)/?$ index.php?page=$1  

修改:Link to the manual

答案 2 :(得分:0)

再做一次检查:

if (preg_match('/^[^\\/.]+$/', $page)) {
    $page .= '/index';
}

如果$page仅为subfolder/index将附加到subfolder/index

答案 3 :(得分:0)

rewriteRule ^foldername/.*$ - [PT] 
rewriteRule ^foldername/.*$ - [PT] 

在任何其他重写规则之前......