将.htaccess内容转译为IIS web.config

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

        <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." />
# Set the default handler.
        <defaultDocument>
            <files>
                <remove value="index.php" />
                <add value="index.php" />
            </files>
  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
<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>
# Make Application handle any 404 errors.
        <!-- 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>
# Don't show directory listings for URLs which map to a directory.
# 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
        <caching>
            <profiles>
                <add extension=".php" policy="DisableCache" kernelCachePolicy="DisableCache" />
                <add extension=".html" policy="CacheForTimePeriod" kernelCachePolicy="CacheForTimePeriod" duration="14:00:00:00" />
            </profiles>
此应用程序使用.htacess档案中的FilesMatch指示词来限制浏览器对于档案(应用程序的元件)的存取。
</FilesMatch>
IIS 7使用「要求筛选」模块来限制浏览器对于档案(应用程序的元件)的存取。对于Web.config档案中的示例应用程序,区段看起来应该像这样:
        </security>
请注意,对于安装作业,您可以将此区段维持为注释状态,因为安装指令码会由此筛选封锁。
另一种使用要求筛选的替代方式是使用URL Rewrite Module,针对任何符合的档案类型传回403错误。URL Rewrite Module的优点是它使用正则表达式来进行比对。
        </rule>

预设文件

预设文件在示例应用程序的.htaccess档案中,DirectoryIndex指示词可告知Web服务器要加载哪个档案(若URL未包含档案名称)。 DirectoryIndex index.php 对于IIS 7,应该在与「模块处理例程」一样高的网站阶层中设定预设文件。例如,使用PHP时,「模块处理例程」通常是在Web服务器层级设定。预设文件也应该在该层级设定,而非在本机网站的内容中设定。Web.config档案中的下列代码可确保此情况:

URL重写

IIS 7包含URL Rewrite Module。您可以使用此延伸模块来提供规则,让IIS重写传入URL要求。使用「URL重写」的最常见情况是提供较短的易记URL。
许多PHP应用程序目前都随附重写规则做为其.htaccess档案的一部分。这些规则可告知Apache的mod_rewrite应如何以及何时重写传入要求。IIS 7的URL Rewrite Module可读取这些规则,并将它们转译为URL Rewrite规则。
如需有关汇入Apache mod_rewrite规则的详细信息,请参阅:汇入Apache mod_rewrite规则。
 
对于示例应用程序,.htaccess档案中的相关mod_rewrite规则是:
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
IIS的URL Rewriter模块可读取并转译这些规则。转译的URL Rewriter规则是:
</rewrite>

错误页面重新导向/处理

某些应用程序会在应用程序范围处理标准错误。示例应用程序之.htaccess档案中的ErrorDocument指示词可告知Web服务器针对任何404或「找不到档案」错误加载首页。
ErrorDocument 404 /index.php
IIS针对此功能使用httpErrors指示词。但是,因为在应用程序层级设定此项目的功能在IIS中预设是关闭的,因此您必须将此区段变更为注释。
 <!–      –>

浏览目录

另一个经常实作的应用程序安全性(或完整性)机制是停用从客户端浏览目录的功能。许多Web服务器设定都可以让使用者检视不包含其中一个预设文件档案之目录中的档案清单。在示例应用程序的.htaccess档案中,是使用Options指示词停用此功能:
Options -Indexes
IIS在Web.config档案中使用directoryBrowse指示词来限制此存取:
        <directoryBrowse enabled=”false” />

缓存老化

缓存指示词可用来确保静态内容会被缓存一段时间,而动态内容一律不会被缓存。在示例应用程序的.htaccess档案中,会使用mod_expires模块提供的ExpiresBy指示词。
</IfModule>
在Web.config档案中,IIS使用「输出缓存」模块与缓存指示词来控制缓存功能。对于示例应用程序,您可以为.html档案启用缓存功能最多14天。对于.php档案,请使用下列代码来确保不会执行任何缓存功能:
        </caching>
嗯,我的梦想就是被读者的稿费包养~~如果觉得有用/受益,请点赞or打赏--1元就足够感动我 =^_^=
赞 (0)
打赏 支付宝打赏 微信打赏
声明:本站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,若涉及侵权请及时告知,将会在第一时间删除,联系邮箱:chei580@west.cn。文章观点不代表本站立场。本站原创内容未经允许不得转载。

clens

记录点滴技术,分享互联信息!转载内容,素材等大多来源网络,会尽量标明原作者,若有侵犯请告知会在第一时间删除。

说点什么

Please Login to comment
avatar
  Subscribe  
提醒