2017-04-03 87 views
1

我有一個名爲/files.php阻止來自直接,但仍允許訪問在重寫規則文件

我的服務器上的文件,我不直接訪問它,而不是我用的.htaccess並將參數傳遞給它:

RewriteCond %{REQUEST_URI} ^/robots\.txt(\?.*)?$ 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f 
RewriteRule^/files.php?file=%{REQUEST_URI} [L] 

我想阻止人們直接訪問此文件,但仍允許我的服務器在重寫規則中使用它。理想情況下,如果用戶試圖直接訪問它,我想提供一個404錯誤。我想出了這個:

RedirectMatch 404 ^/files\.php 

不幸的是,該行也阻止我的重寫規則工作。

+0

如果你的環境允許,你可以將你的files.php移到你的DOCUMENT_ROOT之外(所以它不能直接訪問)並且仍然將請求映射到它,參見:http://httpd.apache.org/docs/2.2/ urlmapping.html#外 –

+0

不幸的是,這對我來說是不可能的。我甚至有files.php的全部原因是因爲我需要文檔根目錄中的某些東西。 http://stackoverflow.com/questions/43130524/sharing-htaccess-file-and-resources-between-domains – GFL

+0

你是否必須通過.htaccess來做到這一點?另一個訣竅是在你的初始index.php(或者你總是加載的其他一些引導.php文件)上定義一個常量,並檢查files.php中是否存在該常量。如果它沒有被定義,那麼你就死掉了。 –

回答

0

試着在你的htaccess

RewriteEngine on 

RewriteCond %{THE_REQUEST} /file\.php [NC] 
RewriteRule^- [R=404,L] 

的頂部添加這一點,如果/file.php是直接訪問。這將返回404錯誤。

%{THE_REQUEST}對於避免重寫循環錯誤或規則覆蓋很重要。

相關問題