所以我希望用户能够为“foo.php”脚本运行写“foo.phps”,以显示该文件的来源。
我只想在一个目录中这样做(因为这是一个安全风险)。 我可以使用.htaccess吗?
我在目录中添加了一个.htaccess文件,并在其中写入:
AddType application/x-httpd-php-source .phps
然后重新启动Apache,但是我不能将“s”添加到文件中以获取源代码。 我是否也需要使用PHP来做些什么?
从PHP文档 ,你需要使用SetHandler
<FilesMatch "\.phps$"> SetHandler application/x-httpd-php-source </FilesMatch>
如果你想知道在一般的.htaccess中是否可以使用指令,你可以随时查阅文档。 对于Apache 2.0,请参阅:
http://httpd.apache.org/docs/2.0/mod/mod_mime.html#addtype
Description: Maps the given filename extensions onto the specified content type Syntax: AddType MIME-type extension [extension] ... Context: server config, virtual host, directory, .htaccess Override: FileInfo Status: Base Module: mod_mime
特别要看“上下文:”部分。
在这个特定的情况下,是的,你可以。 你只需要确保你允许在这个特定的目录下覆盖FileInfo:
例如
<Directory /path/to/my/site> AllowOverride FileInfo </Directory>
您还需要确保文件EXISTS。 如果你有一个名为test.php的文件,你不能神奇地请求test.phps
为了解决这个问题,你可以使用mod_rewrite来强制一个处理程序。 例如,这个规则在mod_rewrite文档中是一个更改mod_rewrite中处理程序的好例子
RewriteEngine On RewriteRule ^(/source/.+\.php)s$ $1 [H=application/x-httpd-php-source]
或者你可以创build一个符号链接,但是你将需要为每个文件手动(或脚本)和新文件。
ln -s test.php test.phps
解决这个问题的方法之一就是需要一个额外的脚本来输出指定文件的源代码。 然后你可以写一个重写规则来重写
成
与此有关的一个主要问题是安全性。 确保你只能输出所需的文件而不是任何文件(如/ etc / passwd)!