2014-06-27 16 views
0

我需要對使用.htaccess的文件夾的所有請求執行auto_prepend_file。 問題是,PHP在CGI-MODE下運行,我不能修改任何其他的php文件或php.ini。 達爲什麼我沒有在.htaccess文件上使用php_value auto_prepend_file "/testing.php"CGI-MODE中的PHP auto_prepend_file無需修改php.ini

在這個規範下有沒有這樣做的方法?

+0

我將只有一個PHP文件在www根目錄中,我沒有權限編輯除.htaccess文件之外的任何文件,以及我在rootdir上的php文件當然。 –

+0

你正在尋找['.user.ini'](http://php.net/manual/en/configuration.file.per-user.php) – hakre

回答

0

假設您的服務器上啓用了mod_rewrite,您可以執行以下操作。

在你的.htaccess增加以下內容:

RewriteEngine on 
RewriteCond %{REQUEST_URI} !/testing\.php 
RewriteRule ^(.*)$ /testing.php?url=$1 [L] 

在testing.php,做任何你想做的事情。在文件的結尾,做這樣的事情:

$file = $_GET['url']; 
if(file_points_to_sensible_location($file) && file_exists($file)) { 
    require($file); 
} 

file_exist是現有的功能。 file_points_to_sensible_location(...)是你必須寫的東西。如果你搞砸了,有人可能能夠執行或轉儲你不想公開的文件。


編輯:您可以防止這種通過添加附加條件到.htaccess文件發生了一定的要求。例如:RewriteCond %{REQUEST_URI} !\.(jpg|jpeg|png|gif|css|js|unicorn)$將阻止對以該擴展名結尾的文件執行testing.php。如果條件爲RewriteCond %{REQUEST_URI} \.php$,則它只會對以.php結尾的請求起作用。

要使其與wordpress一起使用,而不是require($file),您可以使用require("index.php")。由於url是一樣的,wordpress仍然可以工作。

要使其與其他rewriterules一起使用,您需要將rewritelogic移動到您的testing.php。你基本上改變$file以包含重寫後包含的任何內容,幷包含/需要。從.htaccess中刪除相應的規則。

+0

感謝您的回答,但我需要更多與任何請求兼容的東西。在這種情況下,如果您通過圖像請求,例如,它將在屏幕上打印內容而不是圖像。 –

+0

如果你的意思是你不想在你申請一個image/css/js文件時執行'/ tests.php',你可以在.htaccess中排除這些擴展名('RewriteCond%{REQUEST_URI}!\。(jpg | jpeg | PNG | GIF | CSS | JS |麒麟)$')。另外,你只能在其他php腳本之前執行它('RewriteCond%{REQUEST_URI} \ .php $')。這是基於您對問題的要求的基本概念。我無法真正猜到你可能有或沒有其他要求。 – Sumurai8

+0

但這不會與其他「SEO」重寫規則一樣,在wordpress博客中找到。這個想法是強制www root .htaccess文件在任何其他之前執行我的php。我想在我的網站的任何請求上運行自定義分析和記錄程序。但我沒有任何配置文件像httpd.conf或php.ini –

相關問題