簡體   English   中英

如何防止HTTP請求在PHP MVC / LAMP中顯示資源

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM