我正在使用PHP与Apache,并想知道是否有一种方法从客户端指示不应执行/解析所请求的PHP文件.按照标准,我希望在请求时执行所有PHP文件,但我想要一种方法从客户端指示不应该执行该文件.
一个很好的解决方案是使用JavaScript在请求中提供额外的头,然后在.htaccess文件中写一些代码来检查头是否存在,以及是否告诉apache不执行文件并将其作为文本提供.
使用GET参数或其他东西也没关系.
这可能吗?如果是这样,怎么样?
解决方法:
supply an extra header in the request [using JavaScript] and then write some code in a .htaccess file to check if the header is present
您可以让Apache检查此(秘密)标头,并在内部将请求重写为viewAsSource.php类型的文件,然后读取REQUEST_URI(或传递的查询字符串参数)并返回文件源.与@LucasKrupinski建议类似,除了您不需要在PHP文件本身中包含任何内容.
例如,在根.htaccess文件中:
RewriteEngine On
# Block direct access to any file in the /tools directory
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^tools/ - [F]
# Display PHP source...
RewriteCond %{HTTP:X-Action} ^display-source$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule (.+\.php)$tools/display-source.php?url=$1 [L]
对于所有.php请求,这将检查具有值“display-source”的X-Action HTTP请求标头以及所请求的文件是否存在.如果满足这些条件,则将请求内部写入/tools/display-source.php脚本,并在url参数中传递URL.您可以改为检查$_SERVER [‘REQUEST_URI’]超全局,但请注意,这还包括在请求中传递的任何查询字符串.
然后,在display-source.php中,类似于:
$url = isset($_GET['url']) ? $_GET['url'] : null;
if (isset($url)) {
$file = $_SERVER['DOCUMENT_ROOT].'/'.$url;
// Validate $file....
// :
highlight_file($file);
}
标签:htaccess,javascript,php,apache
来源: https://codeday.me/bug/20190823/1700410.html