Как я могу отключить скрипты 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>
Минусы:
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>
.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>