我有一个如下的文件结构:
- 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'); ?>