Итак, я хочу, чтобы пользователь мог запустить write "foo.phps" для сценария "foo.php", чтобы представить источник этого файла.
Я хочу сделать это только в одном каталоге (так как это угроза безопасности). Могу ли я использовать .htaccess?
Я добавил в каталог файл .htaccess и написал в нем следующее:
AddType application/x-httpd-php-source .phps
А затем перезапустил Apache, но я не могу добавить «s» в файл, чтобы получить исходный код. Нужно ли мне что-то делать и с PHP?
Если вы хотите узнать, можно ли вообще использовать директиву в .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>
Вам также необходимо убедиться, что файл СУЩЕСТВУЕТ. Если у вас есть файл с именем test.php, вы не можете просто волшебным образом запросить test.phps
Чтобы решить эту проблему, вы можете использовать mod_rewrite для принудительного запуска обработчика. Например, это правило есть в документации mod_rewrite как хороший пример изменения обработчика в mod_rewrite
RewriteEngine On
RewriteRule ^(/source/.+\.php)s$ $1 [H=application/x-httpd-php-source]
или вы можете создать символическую ссылку, но вам нужно будет сделать это для каждого файла вручную (или создать сценарий) и для новых файлов.
ln -s test.php test.phps
Из php документы, вам нужно использовать SetHandler
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>
Один из способов решения этой проблемы - вам понадобится дополнительный скрипт, который просто выводит источник указанного файла. Затем вы можете написать правило перезаписи, чтобы перезаписать
в
Одна ГЛАВНАЯ проблема с этим - безопасность. Убедитесь, что вы можете выводить только желаемые файлы, а не какой-либо файл (например, / etc / passwd) !!