2008-11-30 74 views
1

假設下面的目錄結構之外去,重寫規則 - 文檔根目錄

htdocs/ 
    images/ 
    css/ 
    .htaccess 
system/ 
    index.php 
    ... 

我想航線通過PHP腳本的所有傳入的請求。我一直在htaccess中嘗試一些重寫規則,但我似乎無法路由到文檔根目錄之外的文件。我在apache手冊中找不到這個原因,所以最終使用了「包含」一個apache配置文件,其中規則是不同的。

在docroot之外有重寫的方法嗎?

回答

4

很多框架所做的工作是使用重寫將所有請求路由到一個文件,您可以在其中執行更復雜的路由。一個例子.htaccess文件可能是:

# ignore anything that's an actual file (eg CSS, js, images) 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f 
# redirect all other traffic to the index page 
RewriteRule ^.*$ index.php [L] 

哪裏的index.php爲您的文檔根目錄(htdocs中/的index.php)內,從中你可以放心地包括系統/ index.php文件在適當情況下。

+0

記得確保你不能包含任何基於查詢字符串的舊文件 - 否則人們可能會嘗試諸如/ etc/passwd或/etc/httpd/httpd.conf等 - 不好! – benlumley 2008-11-30 18:51:28

3

不,您不能在沒有潛在巨大風險的情況下在docroot之外進行路由。

您應該將index.php放在htdocs文件夾中,並在那裏重寫它,而不是在外面。如果您要重寫來處理索引,訪問docroot之外,並且您犯了一個小錯誤,那麼它有可能被任何黑客重寫請求字符串所利用。不漂亮!

+0

在`index.php`中犯錯也很簡單。 – 2014-09-06 19:37:06