.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>