Назад | Перейти на главную страницу

Apache htaccess .phps?

Итак, я хочу, чтобы пользователь мог запустить 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>

Один из способов решения этой проблемы - вам понадобится дополнительный скрипт, который просто выводит источник указанного файла. Затем вы можете написать правило перезаписи, чтобы перезаписать

  • foo.phps

в

  • showmethesource.php? input = foo.php

Одна ГЛАВНАЯ проблема с этим - безопасность. Убедитесь, что вы можете выводить только желаемые файлы, а не какой-либо файл (например, / etc / passwd) !!