»

htaccess 文件指令在 web.config 中相应设置

    WordPress  
cookies百度云加速WP Rockethtaccess网站优化wordpressIISCDN网络安全SEO查询访问CDN的问题工作伪静态windows主机建站访客Wp Super Cache前端CLBApache缓存浏览器重定向

许多 PHP 网站使用的是 Apache 主机,相应的配置文件为 .htaccess,该文件中包含很多服务器端设置参数。与之相应的,对于 Windows 主机,在 IIS 上的配置文件为 Web.config。 

本文主要叙述的是与 .htaccess 文件常规配置参数对应的 IIS 上的配置参数。

 

 

icon-iis

 

配置参数举例

下面的例子为 .htaccess 和 Web.config 文件配置参数。

.HTACCESS 文件

  1. #  
  2. # Apache/PHP/Application settings:  
  3. #  
  4.    
  5. # Protect files and directories from prying eyes.  
  6. <FilesMatch "\.(engine|inc|info|install|module|profile|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template)$">  
  7.   Order allow,deny  
  8. </FilesMatch>  
  9.    
  10. # Don't show directory listings for URLs which map to a directory.  
  11. Options -Indexes  
  12.    
  13. # Follow symbolic links in this directory.  
  14. Options +FollowSymLinks  
  15.    
  16. # Make Application handle any 404 errors.  
  17. ErrorDocument 404 /index.php  
  18.    
  19. # Force simple error message for requests for non-existent favicon.ico.  
  20. <Files favicon.ico>  
  21.   ErrorDocument 404 "The requested file favicon.ico was not found.  
  22. </Files>  
  23.    
  24. # Set the default handler.  
  25. DirectoryIndex index.php  
  26.    
  27. # Override PHP settings. More in sites/default/settings.php  
  28. # but the following cannot be changed at runtime.  
  29.    
  30. # PHP 4, Apache 1.  
  31. <IfModule mod_php4.c>  
  32.   php_value magic_quotes_gpc                0  
  33.   php_value register_globals                0  
  34.   php_value session.auto_start              0  
  35.   php_value mbstring.http_input             pass  
  36.   php_value mbstring.http_output            pass  
  37.   php_value mbstring.encoding_translation   0  
  38. </IfModule>  
  39.   
  40. # PHP 4, Apache 2.  
  41. <IfModule sapi_apache2.c>  
  42.   php_value magic_quotes_gpc                0  
  43.   php_value register_globals                0  
  44.   php_value session.auto_start              0  
  45.   php_value mbstring.http_input             pass  
  46.   php_value mbstring.http_output            pass  
  47.   php_value mbstring.encoding_translation   0  
  48. </IfModule>  
  49.    
  50. # PHP 5, Apache 1 and 2.  
  51. <IfModule mod_php5.c>  
  52.   php_value magic_quotes_gpc                0  
  53.   php_value register_globals                0  
  54.   php_value session.auto_start              0  
  55.   php_value mbstring.http_input             pass  
  56.   php_value mbstring.http_output            pass  
  57.   php_value mbstring.encoding_translation   0  
  58. </IfModule>  
  59.    
  60. # Requires mod_expires to be enabled.  
  61. <IfModule mod_expires.c>  
  62.   # Enable expirations.  
  63.   ExpiresActive On  
  64.    
  65.   # Cache all files for 2 weeks after access (A).  
  66.   ExpiresDefault A1209600  
  67.    
  68.   # Do not cache dynamically generated pages.  
  69.   ExpiresByType text/html A1  
  70. </IfModule>  
  71.    
  72. # Various rewrite rules.  
  73. <IfModule mod_rewrite.c>  
  74.   RewriteEngine on  
  75.    
  76.   # If your site can be accessed both with and without the 'www.' prefix, you  
  77.   # can use one of the following settings to redirect users to your preferred  
  78.   # URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option:  
  79.   #  
  80.   # To redirect all users to access the site WITH the 'www.' prefix,  
  81.   # (http://example.com/... will be redirected to http://www.example.com/...)  
  82.   # adapt and uncomment the following:  
  83.   # RewriteCond %{HTTP_HOST} ^example\.com$ [NC]  
  84.   # RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]  
  85.   #  
  86.   # To redirect all users to access the site WITHOUT the 'www.' prefix,  
  87.   # (http://www.example.com/... will be redirected to http://example.com/...)  
  88.   # uncomment and adapt the following:  
  89.   # RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]  
  90.   # RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]  
  91.    
  92.   # Modify the RewriteBase if you are using Application in a subdirectory or in a  
  93.   # VirtualDocumentRoot and the rewrite rules are not working properly.  
  94.   # For example if your site is at http://example.com/application uncomment and  
  95.   # modify the following line:  
  96.   # RewriteBase /application  
  97.   #  
  98.   # If your site is running in a VirtualDocumentRoot at http://example.com/,  
  99.   # uncomment the following line:  
  100.   # RewriteBase /  
  101.    
  102.   # Rewrite URLs of the form 'x' to the form 'index.php?q=x'.  
  103.   RewriteCond %{REQUEST_FILENAME} !-f  
  104.   RewriteCond %{REQUEST_FILENAME} !-d  
  105.   RewriteCond %{REQUEST_URI} !=/favicon.ico  
  106.   RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]  
  107. </IfModule>  
  108.    
  109. # $Id: .htaccess,v 1.90.2.1 2008/07/08 09:33:14 goba Exp $  

 

本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利

WEB.CONFIG 文件配置参数举例

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <configuration>  
  3.   
  4.     <configSections>  
  5.         <sectionGroup name="system.webServer">  
  6.             <sectionGroup name="rewrite">  
  7.                 <section name="rewriteMaps" overrideModeDefault="Allow" />  
  8.                 <section name="rules" overrideModeDefault="Allow" />  
  9.             </sectionGroup>  
  10.         </sectionGroup>  
  11.     </configSections>  
  12.   
  13.     <system.webServer>  
  14.         <security>  
  15.             <!--  This section should be uncommented after  
  16.             installation to secure the installation. -->  
  17.             <!--  
  18.             <requestFiltering>  
  19.                 <denyUrlSequences>  
  20.                     <add sequence="engine" />  
  21.                     <add sequence="inc" />  
  22.                     <add sequence="info" />  
  23.                     <add sequence="module" />  
  24.                     <add sequence="profile" />  
  25.                     <add sequence="po" />  
  26.                     <add sequence="sh" />  
  27.                     <add sequence="theme" />  
  28.                     <add sequence="tpl(\.php" />  
  29.                     <add sequence="Root" />  
  30.                     <add sequence="Tag" />  
  31.                     <add sequence="Template" />  
  32.                     <add sequence="Repository" />  
  33.                     <add sequence="code-style" />  
  34.                 </denyUrlSequences>  
  35.                 <fileExtensions>  
  36.                     <add fileExtension=".sql" allowed="false" />  
  37.                     <add fileExtension=".pl" allowed="false" />  
  38.                 </fileExtensions>  
  39.             </requestFiltering>  
  40.             -->  
  41.         </security>  
  42.         <directoryBrowse enabled="true" />  
  43.         <caching>  
  44.             <profiles>  
  45.                 <add extension=".php" policy="DisableCache" kernelCachePolicy="DisableCache" />  
  46.                 <add extension=".html" policy="CacheForTimePeriod" kernelCachePolicy="CacheForTimePeriod" duration="14:00:00:00" />  
  47.             </profiles>  
  48.         </caching>  
  49.         <rewrite>  
  50.             <rules>  
  51.                 <rule name="block favicon" stopProcessing="true">  
  52.                     <match url="favicon\.ico" />  
  53.                     <action type="CustomResponse" statusCode="404" subStatusCode="1"   
  54.                         statusReason="The requested file favicon.ico was not found"   
  55.                         statusDescription="The requested file favicon.ico was not found" />  
  56.                 </rule>  
  57.                 <rule name="Imported Rule 1" stopProcessing="true">  
  58.                     <match url="^(.*)$" ignoreCase="false" />  
  59.                     <conditions>  
  60.                         <add input="{HTTP_HOST}" pattern="^example\.com$" />  
  61.                     </conditions>  
  62.                       
  63.                     <action type="Redirect" redirectType="Permanent" url="http://www.example.com/{R:1}" />  
  64.                 </rule>  
  65.                 <rule name="Imported Rule 2" stopProcessing="true">  
  66.                     <match url="^(.*)$" ignoreCase="false" />  
  67.                     <conditions>  
  68.                         <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />  
  69.                         <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />  
  70.                         <add input="{URL}" pattern="^/favicon.ico$" ignoreCase="false" negate="true" />  
  71.                     </conditions>  
  72.                     <action type="Rewrite" url="index.php?q={R:1}" appendQueryString="true" />  
  73.                 </rule>  
  74.             </rules>  
  75.         </rewrite>  
  76.         <defaultDocument>  
  77.             <files>  
  78.                 <remove value="index.php" />  
  79.                 <add value="index.php" />  
  80.             </files>  
  81.         </defaultDocument>  
  82.   
  83.         <!-- HTTP Errors section should only be enabled if the "Error Pages"  
  84.         feature has been delegated as "Read/Write" at the Web Server level.  
  85.            <httpErrors>  
  86.                <remove statusCode="404" subStatusCode="-1" />  
  87.                <error statusCode="404" prefixLanguageFilePath="" path="/index.php" responseMode="ExecuteURL" />  
  88.            </httpErrors>  
  89.         -->  
  90.   
  91.     </system.webServer>  
  92. </configuration>  

 

禁止访问某文件

在 .htacess 文件中,可以运用 FilesMatch 指令来禁止访问某类文件:

  1. <FilesMatch "\.(engine|inc|info|install|module|profile|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template)$">  
  2.   Order allow,deny  
  3. </FilesMatch>  

 

本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利

IIS 中,可以使用请求筛选模块 Request Filtering 模块,通过设置 Web.config 来限制浏览器访问某类文件:

  1. <security>  
  2.             <requestFiltering>  
  3.                 <denyUrlSequences>  
  4.                     <add sequence="engine" />  
  5.                     <add sequence="inc" />  
  6.                     <add sequence="info" />  
  7.                     <add sequence="install" />  
  8.                     <add sequence="module" />  
  9.                     <add sequence="profile" />  
  10.                     <add sequence="po" />  
  11.                     <add sequence="sh" />  
  12.                     <add sequence="theme" />  
  13.                     <add sequence="tpl(\.php" />  
  14.                     <add sequence="Root" />  
  15.                     <add sequence="Tag" />  
  16.                     <add sequence="Template" />  
  17.                     <add sequence="Repository" />  
  18.                     <add sequence="code-style" />  
  19.                 </denyUrlSequences>  
  20.                 <fileExtensions>  
  21.                     <add fileExtension=".sql" allowed="false" />  
  22.                     <add fileExtension=".pl" allowed="false" />  
  23.                 </fileExtensions>  
  24.             </requestFiltering>  
  25.         </security>  

 

另外也可以通过URL 重写组件来设定、禁止某类文件访问,返回代码为 403。使用该模块组件的好处是,可以使用正则表达:

  1. <rule name="Protect files and directories from prying eyes" stopProcessing="true">   
  2.                 <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)$" />   
  3.                 <action type="CustomResponse" statusCode="403" subStatusCode="0"   
  4.                     statusReason="Forbidden"   
  5.                     statusDescription="Access is forbidden." />   
  6.         </rule>  

 

默认文件

在 .htaccess 中,可以通过 DirectoryIndex 设置默认文件,告诉服务器如果没有相应 URL 时,需要加载哪些索引文件。

本文禁止全文转载。任何形式转载请联系作者(时光在路上 www.timezls.com) Copyright © 2023. All Rights Reserved

  1. # Set the default handler.  
  2. DirectoryIndex index.php  

而对于使用 IIS 服务的 Windows 主机,默认文件应该设置在网站的高级别上。例如,对于 PHP,Module Handler 通常设置为 Web server 水平,默认文件也应该设置在这个水平,而不是放在网站局部。在 Web.config 文件中应该确保这样设置:

  1. <defaultDocument>  
  2.             <files>  
  3.                 <remove value="index.php" />  
  4.                 <add value="index.php" />  
  5.             </files>  
  6. </defaultDocument>  

 

本文禁止无授权转载 - 时光在路上 www.timezls.com 保留所有权利

URL 重写

IIS 包含了重写模块。可以该扩展来重新定义 URL 请求。最常用的 URL 重写为伪静态网址设置。

许多 PHP 系统目前使用 .htaccess 文件设置 URL 重写。这些规则可以告诉 Apache 相应模块在何时、如何响应网址请求。Windows主机的 IIS 服务设置类似下面这样。

例如,在 .htaccess 文件中,设置如下:

  1. RewriteCond %{HTTP_HOST} ^example\.com$ [NC]  
  2. RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]  
  3.   
  4. RewriteCond %{REQUEST_FILENAME} !-f  
  5. RewriteCond %{REQUEST_FILENAME} !-d  
  6. RewriteCond %{REQUEST_URI} !=/favicon.ico  
  7. RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]  

而使用 IIS 的 URL 重写模块,则可以这样设置:

  1. <rewrite>  
  2.   <rules>  
  3.     <rule name="Imported Rule 1" stopProcessing="true">  
  4.       <match url="^(.*)$" ignoreCase="false" />  
  5.       <conditions>  
  6.         <add input="{HTTP_HOST}" pattern="^example\.com$" />  
  7.       </conditions>  
  8.       <action type="Redirect" redirectType="Permanent" url="http://www.example.com/{R:1}" />  
  9.     </rule>  
  10.     <rule name="Imported Rule 2" stopProcessing="true">  
  11.       <match url="^(.*)$" ignoreCase="false" />  
  12.       <conditions>  
  13.         <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />  
  14.         <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />  
  15.         <add input="{URL}" pattern="^/favicon.ico$" ignoreCase="false" negate="true" />  
  16.       </conditions>  
  17.       <action type="Rewrite" url="index.php?q={R:1}" appendQueryString="true" />  
  18.     </rule>  
  19.   </rules>  
  20. </rewrite>  

 

错误页面处理

.htaccess 文件中的 ErrorDocument 指令会告诉网站服务器加载页面时显示 404 或“File Not Found”错误:

  1. # Make Application handle any 404 errors.  
  2. ErrorDocument 404 /index.php  

IIS 中,可以使用 httpErrors 指令。由于 IIS 默认关闭了此功能,需要下面这段代码注释掉:

  1. <!-- HTTP Errors section should only be enabled if the "Error Pages"  
  2.         feature has been delegated as "Read/Write" at the Web Server level.  
  3.            <httpErrors>  
  4.                <remove statusCode="404" subStatusCode="-1" />  
  5.                <error statusCode="404" prefixLanguageFilePath="" path="/index.php" responseMode="ExecuteURL" />  
  6.            </httpErrors>  
  7.         -->  

 

本文禁止全文转载。任何形式转载请联系作者(时光在路上 www.timezls.com) Copyright © 2023. All Rights Reserved

文件夹浏览

许多服务器配置时会让用户查看一些不包含默认文件的文件夹内的文件列表。另一个安全措施就是可以禁止客户端浏览某些文件夹。在 .htaccess 文件中,可以这样设置:

  1. # Don't show directory listings for URLs which map to a directory.  
  2. Options -Indexes  

IIS 中可以通过 Web.config 文件中 directoryBrowse 指令设置:

  1. <directoryBrowse enabled="false" />  

 

缓存时间

缓存 Caching 指令用来确保静态文件缓存一定时间,而动态内容不缓存。在 .htaccess 文件中,通过 mod_expires 模块的 ExpiresBy 指令设置:

本文禁止全文转载。任何形式转载请联系作者(时光在路上 www.timezls.com) Copyright © 2023. All Rights Reserved

  1. # Requires mod_expires to be enabled.  
  2. <IfModule mod_expires.c>  
  3.   # Enable expirations.  
  4.   ExpiresActive On  
  5.   
  6.   # Cache all files for 2 weeks after access (A).  
  7.   ExpiresDefault A1209600  
  8.   
  9.   # Do not cache dynamically generated pages.  
  10.   ExpiresByType text/html A1  
  11. </IfModule>  

Web.config 文件中,IIS 通过 Output Caching 模块和 caching 指令控制缓存。例如,你可以将 .html 文件设置成缓存 14 天,也可以设置不缓存 PHP 文件:

  1. <caching>  
  2.            <profiles>  
  3.                <add extension=".php" policy="DisableCache" kernelCachePolicy="DisableCache" />  
  4.                <add extension=".html" policy="CacheForTimePeriod" kernelCachePolicy="CacheForTimePeriod" duration="14:00:00:00" />  
  5.            </profiles>  
  6.        </caching>  

本文禁止全文转载。任何形式转载请联系作者(时光在路上 www.timezls.com) Copyright © 2023. All Rights Reserved

时光在路上扫码阅读、分享
  • 版权声明:该文章由 时光在路上 发表,共 13546字。除非特别标注来源,否则为原创。详见《版权声明》部分。
  • 转载请注明:文章标题和文章链接 - 时光在路上 - 也可直接“复制本文链接” 或 使用右边二维码分享本文 →