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

Как я могу отключить скрипты php в определенном подкаталоге моего веб-сайта на IIS7?

Как я могу отключить скрипты php в определенном подкаталоге моего веб-сайта с помощью IIS7?

У меня есть блог на wordpress, и я хочу отключить php в каталоге загрузок.

Здесь у вас есть несколько вариантов. Все примеры кода (по одному для каждого подхода) необходимо разместить в web.config файл в вашем "загрузки" папка (на случай, если вы этого не знаете).

1) Удалить обработчик который отвечает за обработку файлов * .php (в диспетчере IIS это «Handler Mappings»):

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <remove name="PHP 5" />
        </handlers>
    </system.webServer>
</configuration>

Минусы:

  • Вам нужно знать имя обработчика
  • Имя обработчика может быть изменено в будущем (администратор может изменить обработку PHP по-другому и т. Д.)

2) Использование Запросить фильтрацию модуль отключить все запросы к файлам с .php extension - сервер отправит клиенту ошибку 404.7. Этот модуль входит в состав IIS 7.5, но для IIS 7.0 вам может потребоваться загрузить и установить Пакет администрирования.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <security>
            <requestFiltering>
                <fileExtensions>
                    <add fileExtension=".php" allowed="false" />
                </fileExtensions>
            </requestFiltering>
        </security>
    </system.webServer>
</configuration>

Если у вас есть несколько расширений для PHP, вам также нужно будет их перечислить (например, .phtml, .php5 и т.д).

3) Использование Модуль перезаписи URL создать правило для Прервать такой запрос.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <clear />
                <rule name="Abort PHP" stopProcessing="true">
                    <match url="^.*\.php$" />
                    <action type="AbortRequest" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>
  • IIS 7.0 не имеет встроенного модуля перезаписи URL, в то время как IIS 7.5 имеет v1.1. К сожалению, у меня не установлена ​​версия 1.1 этого расширения - только версия 2, и я не могу проверить / гарантировать, что это будет работать в версии 1.1. В любом случае - рекомендую скачать и установить 2 версию Модуль перезаписи URL.
  • Вам нужно будет расширить это правило, чтобы также отслеживать другие расширения файлов, которые могут обрабатываться PHP в вашей настройке (например, .phtml, .php5 и т.д).

4) Использование Модуль перезаписи URL создать правило для ответить с пользовательской ошибкой вместо обработки такого запроса.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <clear />
                <rule name="Disable PHP" stopProcessing="true">
                    <match url="^.*\.php$" />
                    <action type="CustomResponse" statusCode="404" statusReason="No PHP here" statusDescription="Sorry mate" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

5) Использование Модуль перезаписи URL создать правило для перенаправить на свою страницу ошибок для всех таких запросов.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <clear />
                <rule name="Show Our Error Page for PPHP files" stopProcessing="true">
                    <match url="^.*\.php$" />
                    <action type="Rewrite" url="/404.php" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

Вышеупомянутое правило будет внутренне перенаправлять (перезаписывать) такие запросы на 404.php файл в корневой папке веб-сайта (например, http://www.example.com/404.php)


Если возможно, используйте №2 - он будет выполнен до этапа перезаписи URL, что будет полезно на очень загруженном сервере.

Я знаю, что эта ветка немного устарела, но я лично подписываюсь на философию «Write + Execute = BAD», и поэтому папка загрузки никогда не должна выполняться. Имея это в виду, любой обработчик, выходящий за рамки обработчика статических файлов, можно рассматривать как угрозу безопасности.

Чтобы удалить все, кроме статического обработчика файлов (независимо от того, как вызываются другие обработчики) (все преимущества # 1 выше, но без минусов):

<configuration>
<system.webServer>
    <handlers>
       <clear />
        <add 
            name="StaticFile" 
            path="*" verb="*" 
            modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" 
            resourceType="Either" 
            requireAccess="Read" />
    </handlers>
    <staticContent>
         <mimeMap fileExtension=".*" mimeType="application/octet-stream" />
      </staticContent>
   </system.webServer>
</configuration>