Apache 在 DocumentRoot 之外重定向

Apache 在 DocumentRoot 之外重定向

我有一个如下的文件结构:

- Site
  - includes
    - page.php
  - pages
    - example.php
  - public
    - .htaccess

.htaccess使用rewrite_module来解析对page.php的大多数请求。

RewriteRule ^ "../includes/page.php" [L]

页面.php解析原始请求并包含来自页面目录的正确的“页面”。

我希望初始请求解析为 /Site/public,因此我有以下 apache 配置:

<VirtualHost *:80>
        ServerName example.com
        DocumentRoot /Site/public
</VirtualHost>

由于我试图重定向到 DocumentRoot 之外的文件,因此会产生 400 Bad Request 错误。

我最终不希望用户能够直接访问公共之外的文件。

有没有一个好的方法可以指定,在执行方面,/Site 是根,但在服务方面,/Site/public 是根?

答案1

这很常见。

您不应该使用 .htaccess 作为路由器,而应该使用 PHP。

编辑:您不能使用 .htaccess 来路由 docroot 之外的页面。

将大多数文件保存在文档根目录之外,但保留处理路由的 index.php。PHP 能够包含/要求文档根目录之外的文件,这在一些 PHP 框架中得到了广泛使用。

- Site
  - includes
    - page.php
  - pages
    - example.php
  - public
    - .htaccess
    - index.php ( <?php require_once('../includes/page.php'); ?>

相关内容