[英]How to prevent http request from displaying resources in a PHP MVC / LAMP
我重新構建自己的PHP MVC框架。
默認情況下,我的每個請求都由/index.php處理,這觸發了路由的mvc進程,執行該請求並重新建立適當的視圖。 每個請求都根據單個'q'GET參數(如drupal樣式)進行路由,例如
/index.php?q=anApplication/aController/theAction/arg1/.../moreArguments
這工作得很好,並且可以通過mod_rewrite輕松清理干凈的url。 好。
我有一個這樣的目錄樹:
/public
|----themeName
|--------|
|----page.tpl
|----content.tpl
|----etc.
/private
|----sourceDirectory
|----moreSources
我不希望存儲在私有和公共目錄中的文件像HTTP請求一樣直接提供服務:我不希望
mySrv /公/ THEMENAME / page.tpl
以顯示無效的模板或任何不是圖像的資源,從而繞過我的核心處理程序-index.php。
我認為我可以通過這樣的重寫配置來實現某些目標
RewriteEngine on
RewriteBase /
RewriteRule ^(.*)$ index.php?q=$1 [QSA,L]
但是該框架只能在啟用了mod_rewrite的站點上工作,因為這將重寫所有現有和不存在的資源。
我要的是:是否有另一種方法可以使我選擇的資源(例如現有或不存在的資源)滿足每個請求?
謝謝
只需將所有模板等存儲在public_html文件夾之外。
這將允許PHP進行訪問,但是外界無法訪問該文件。
最簡單,更可移植的方法是將除index.php
之外的所有內容從文檔根目錄中拉出。 PHP仍然可以包含文件並執行其他所有操作。
我沒有嘗試過,但是如果您將index.php 放在舊文檔樹之外
---/ app / new-index.php
|
/ public /
|
/ private / ...
|
index.php
然后在new-index.php
的開頭添加
<?php
chdir('..');
require 'index.php';
?>
最后重新配置Apache,以使DocumentRoot實際上變成/app
,然后一切都應該像以前一樣工作-除了Apache以外的所有URL對'/'不再有意義,並且所有URL都可以放置在合適的ErrorDocument 404上。
注意 :“所有內容都應工作”,HTTP重定向除外 。 您可以從FS讀取未解釋的PHP文件,但是不能再從本地主機上的Apache獲得其解釋的內容。 同樣,您應該驗證任何現有代碼均未使用DOCUMENT_ROOT
全局變量。 如有必要,您可以覆蓋它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.