0

必要知识

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

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

“page”变量用于 php 包括:

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

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

好的,问题来了:

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

这有效:

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

但是现在我无法从以下位置访问子文件夹: domain.com/subfolder/ 因为有一个“页面”变量

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

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

提前致谢

4

4 回答 4

2

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

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

您可能需要测试尾部斜杠,它可能适用于 /subfolder/ 但不适用于 /subfolder

于 2009-07-23T11:09:13.967 回答
0

再做一次检查:

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

if $pageis just subfolder/index将附加到 have subfolder/index

于 2009-07-23T11:10:02.870 回答
0

您可以通过排除特定文件夹

rewritecond %{REQUEST_URI}!^/folder1/  
rewritecond %{REQUEST_URI}!^/folder2/  
RewriteRule ^([^/.]+/[^/.]+)/?$ index.php?page=$1  

编辑:链接到手册

于 2009-07-23T11:00:22.313 回答
0
rewriteRule ^foldername/.*$ - [PT] 
rewriteRule ^foldername/.*$ - [PT] 

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

于 2010-02-19T05:05:34.223 回答