.htaccess в IIS web.config
Содержание
.htaccess в IIS web.config
Request Filtering
Тут используется директива FilesMatch в файле .htacess, чтобы ограничить доступ браузера к файлам, которые являются компонентами приложения.
<FilesMatch "\.(engine|inc|info|install|module|profile|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template)$"> Order allow,deny </FilesMatch>
IIS использует модуль фильтрации запросов, чтобы ограничить доступ браузера к файлам. Web.config для примера выше:
<security>
<requestFiltering>
<denyUrlSequences>
<add sequence="engine" />
<add sequence="inc" />
<add sequence="info" />
<add sequence="install" />
<add sequence="module" />
<add sequence="profile" />
<add sequence="po" />
<add sequence="sh" />
<add sequence="theme" />
<add sequence="tpl(\.php" />
<add sequence="Root" />
<add sequence="Tag" />
<add sequence="Template" />
<add sequence="Repository" />
<add sequence="code-style" />
</denyUrlSequences>
<fileExtensions>
<add fileExtension=".sql" allowed="false" />
<add fileExtension=".pl" allowed="false" />
</fileExtensions>
</requestFiltering>
</security>
Альтернативой использованию фильтрации запросов является использование модуля URL Rewriter для возврата ошибки 403 для любого из соответствующих типов файлов. Преимущество модуля URL Rewriter заключается в том, что он использует регулярное выражение для сопоставления.
<rule name="Protect files and directories from prying eyes" stopProcessing="true">
<match url="\.(engine|inc|info|install|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl|svn-base)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template|all-wcprops|entries|format)$" />
<action type="CustomResponse" statusCode="403" subStatusCode="0"
statusReason="Forbidden"
statusDescription="Access is forbidden." />
</rule>
Default Document
В файле .htaccess директива DirectoryIndex сообщает веб-серверу, какой файл загружать, если имя файла не включено в URL-адресе
# Set the default handler. DirectoryIndex index.php
Для IIS, документ по умолчанию должен быть установлен в самой верхней иерархии веб-сайта в качестве обработчика модуля. Например, PHP, обработчик модуля обычно устанавливается на уровне веб-сервера. Документ по умолчанию должен быть установлен на этом уровне также, а не локально в контексте веб-сайта. Следующий код в файле Web.config может переопределить какой файл использовать:
<defaultDocument>
<files>
<remove value="index.php" />
<add value="index.php" />
</files>
</defaultDocument>
URL Rewriting
IIS включает модуль URL Rewrite. Вы можете использовать это расширение для предоставления правилам IIS перезаписи входящих запросов URL. Наиболее распространенное использование URL Rewriting - предоставление более коротких и удобных для запоминания URL-адресов.
Многие PHP-приложения в настоящее время поставляются с rewrite правилами в своих файлах .htaccess. Эти правила описывают mod_rewrite Apache, как и когда переписывать входящие запросы. Модуль URL Rewriting IIS может читать эти правила и транслировать их в правила URL Rewriting.
Для примера правила mod_rewrite в файле .htaccess:
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
Переведенные правила URL Rewriter:
<rewrite>
<rules>
<rule name="Imported Rule 1" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions>
<add input="{HTTP_HOST}" pattern="^example\.com$" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="http://www.example.com/{R:1}" />
</rule>
<rule name="Imported Rule 2" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
<add input="{URL}" pattern="^/favicon.ico$" ignoreCase="false" negate="true" />
</conditions>
<action type="Rewrite" url="index.php?q={R:1}" appendQueryString="true" />
</rule>
</rules>
</rewrite>
Error Page Redirects / Handling
Некоторые приложения обрабатывают стандартные ошибки в рамках приложения. Директива ErrorDocument в файле .htaccess примера сообщает веб-серверу загрузить домашнюю страницу для обработки любых ошибок 404 или «Файл не найден»
# Make Application handle any 404 errors. ErrorDocument 404 /index.php
IIS использует директиву httpErrors для этой функции. Однако, поскольку возможность установки этого параметра на уровне приложения по умолчанию отключена для IIS, этот раздел должен быть закомментирован.:
<!-- HTTP Errors section should only be enabled if the "Error Pages"
feature has been delegated as "Read/Write" at the Web Server level.
<httpErrors>
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/index.php" responseMode="ExecuteURL" />
</httpErrors>
-->
Directory Browsing
Другая часто применяемая мера безопасности (или целостности) приложения - отключение просмотра каталогов. Многие конфигурации веб-серверов позволят пользователям просматривать список файлов в каталоге, который не содержит один из файлов документов по умолчанию. .htaccess пример (директива Options):
# Don't show directory listings for URLs which map to a directory. Options -Indexes
Аналогичный пример Web.config с помощью директивы directoryBrowse:
<directoryBrowse enabled="false" />
Cache Aging
Директивы кэширования используются для обеспечения кэширования статического содержимого в течение определенного периода времени, а динамический контент вообще не кэшируется. В файле .htaccess пример использования директивы ExpiresBy, предоставляемые модулем mod_expires:
# Requires mod_expires to be enabled. <IfModule mod_expires.c> # Enable expirations. ExpiresActive On # Cache all files for 2 weeks after access (A). ExpiresDefault A1209600 # Do not cache dynamically generated pages. ExpiresByType text/html A1 </IfModule>
В файле Web.config IIS использует модуль Output Caching и директиву кэширования для управления кешированием. В примере приложения вы можете включить кеширование для .html-файлов максимум 14 дней. Для .php-файлов кеширование вообще не выполняется:
<caching>
<profiles>
<add extension=".php" policy="DisableCache" kernelCachePolicy="DisableCache" />
<add extension=".html" policy="CacheForTimePeriod" kernelCachePolicy="CacheForTimePeriod" duration="14:00:00:00" />
</profiles>
</caching>