CGI-MODE中的PHP auto_prepend_file,无需修改php.ini

时间:2014-06-27 18:12:31

标签: php .htaccess

我需要使用auto_prepend_file对文件夹的所有请求.htaccess。 问题是,PHP在CGI-MODE下运行,我无法修改任何其他php文件或php.ini。 Tat是我在php_value auto_prepend_file "/testing.php"文件上没有使用.htaccess的原因。

在这个规范下有没有办法做到这一点?

1 个答案:

答案 0 :(得分: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" )。由于网址相同,所以wordpress仍然可以使用。

要使其与其他rewriterule一起使用,您需要将rewritelogic移动到testing.php。你基本上改变$file以包含重写后包含的内容和include / require。从.htaccess删除相应的规则。