我需要使用auto_prepend_file
对文件夹的所有请求.htaccess
。
问题是,PHP在CGI-MODE下运行,我无法修改任何其他php文件或php.ini。
Tat是我在php_value auto_prepend_file "/testing.php"
文件上没有使用.htaccess
的原因。
在这个规范下有没有办法做到这一点?
答案 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
删除相应的规则。