【问题标题】:.htaccess with dynamic php - subfolder problems.htaccess 与动态 php - 子文件夹问题
【发布时间】:2010-11-13 08:11:36
【问题描述】:

必要知识

我的 .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=subfolder/about

这行得通:

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

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

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

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

提前致谢

【问题讨论】:

    标签: php apache .htaccess mod-rewrite subdirectory


    【解决方案1】:
    rewriteRule ^foldername/.*$ - [PT] 
    rewriteRule ^foldername/.*$ - [PT] 
    

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

    【讨论】:

      【解决方案2】:

      再做一次检查:

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

      如果$page 只是subfolder,则/index 将附加到subfolder/index

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:

          您可以通过

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

          编辑:Link to the manual

          【讨论】:

            猜你喜欢
            • 2011-11-23
            • 2021-12-16
            • 2021-05-08
            • 1970-01-01
            • 1970-01-01
            • 2020-08-28
            • 1970-01-01
            • 1970-01-01
            • 2020-05-30
            相关资源
            最近更新 更多