Guest User

web.config optimizado para rendimiento y seo

a guest
Nov 25th, 2013
1,722
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3.   <appSettings>
  4.     <!-- Estos parámetros de appSettings solo funcionan en ASP.NET 4.5 o superior -->
  5.     <add key="ClientValidationEnabled" value="true" />
  6.     <!-- Con está opción especificamos que ASP.NET utilice la validación no intrusiva, evitando que inserte código de javascript en linea en todas las páginas de nuestra web -->
  7.     <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  8.   </appSettings>
  9.   <!-- Configuración de ASP.NET -->
  10.   <system.web>
  11.     <!--
  12.      Especificamos el framework que utilizamos (4.5)
  13.      El lenguaje de programación (C#)
  14.      Que no compile la aplicación entera cada vez que hagamos un cambio en el código.
  15.      Especificamos que utilice la compilación por lotes y el tamaño máximo de los ensamblados generados al compilar. Esto suele funcionar bien para aplicaciones pequeñas y medianas pero puede dar problemas en aplicaciones con un gran número de archivos, se debe probar y ver la forma en la que la aplicación funciona mejor.
  16.      Establecemos el número máximo de veces que la aplicación puede recompilarse parcialmente antes de reiniciar completamente. Esto es muy útil si no se hacen cambios muy a menudo en la web ya que evitamos que la aplicación tenga que cargar de nuevo todo el código compilado en memoria siendo los cambios transparentes para los visitantes. Si se hacen varios cambios diariamente es mejor establecer está opción a un número menor como 5 para evitar consumir memoria de forma excesiva.
  17.      Especificamos que la aplicación no se ejecute en modo depuración.
  18.      -->
  19.       <compilation targetFramework="4.5" defaultLanguage="C#" optimizeCompilations="true" batch="true" maxBatchGeneratedFileSize="2147483647" maxBatchSize="2147483647" numRecompilesBeforeAppRestart="2147483647" debug="false" />
  20.  
  21.       <!-- Especificamos un nombre de cookie de sesión corto y habilitamos la compresión, esta opción es muy útil sobre todo utilizamos el modo en el que la sesión se guarda en memoria (InProc) -->
  22.       <sessionState timeout="1440" cookieName="s" compressionEnabled="true" />
  23.  
  24.       <!-- Eliminamos la cabecera de la versión de ASP.NET para mayor seguridad -->
  25.       <httpRuntime targetFramework="4.5" requestValidationMode="2.0" requestPathInvalidCharacters="" enableVersionHeader="false" relaxedUrlToFileSystemMapping="true" />
  26.  
  27.     <!-- Especificamos que las cookies enviadas no se puedan modificar desde javascript -->
  28.     <httpCookies httpOnlyCookies="true" requireSSL="false" />
  29.  
  30.         <!-- Especificamos el idioma y la codificación de los archivos por defecto. -->
  31.         <globalization culture="es-ES" uiCulture="es-ES" enableBestFitResponseEncoding="false" enableClientBasedCulture="false" fileEncoding="UTF-8" requestEncoding="UTF-8" responseEncoding="UTF-8" responseHeaderEncoding="UTF-8" />
  32.  
  33.         <!--
  34.        (clientIdMode) Especificamos que los IDs de los controles se generen con el algoritmo "Predictable" para que sean lo más cortos posibles.
  35.        (autoEventWireUp) Evitamos que ASP.NET examine la página para asignar los eventos de los controles.
  36.        (renderAllHiddenFieldsAtTopOfForm) Con está opción en false evitamos que en los webforms aparezcan todos los hidden en la parte superior de la página.
  37.        -->
  38.         <pages clientIDMode="Predictable" autoEventWireup="false" enableEventValidation="true" buffer="true" compilationMode="Always" enableSessionState="true" enableViewState="true" enableViewStateMac="true" validateRequest="true" renderAllHiddenFieldsAtTopOfForm="false" viewStateEncryptionMode="Always"></pages>
  39.  
  40.        <!--
  41.       Especificamos que se utilice la reescritura de la respuesta cuando se produce un error en la aplicación en vez de hacer una redirección. De esta forma logramos que los códigos de estado devueltos sean correctos.
  42.       -->
  43.        <customErrors mode="RemoteOnly" redirectMode="ResponseRewrite" defaultRedirect="error.aspx?error=400">
  44.          <error statusCode="404" redirect="error.aspx?error=404" />
  45.          <error statusCode="500" redirect="error.aspx?error=500" />
  46.        </customErrors>
  47.  
  48.        <!-- Deshabilitamos el seguimiento -->
  49.        <trace enabled="false" />
  50.   </system.web>
  51.  
  52.   <!-- Habilitamos la compresión y las cabeceras de cache en los manejadores AJAX de ASP.NET -->
  53.   <system.web.extensions>
  54.     <scripting>
  55.       <scriptResourceHandler enableCaching="true" enableCompression="true" />
  56.     </scripting>
  57.   </system.web.extensions>
  58.  
  59.   <!-- Configuración de IIS -->
  60.   <system.webServer>
  61.     <!-- Habilitamos la compresión GZIP y especificamos las cabeceras de cache a un año -->
  62.         <urlCompression doStaticCompression="true" doDynamicCompression="true" dynamicCompressionBeforeCache="true" />
  63.     <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" sendCacheHeaders="true" cacheControlHeader="max-age=31536000" dynamicCompressionDisableCpuUsage="90" staticCompressionDisableCpuUsage="90" dynamicCompressionEnableCpuUsage="0" staticCompressionEnableCpuUsage="0">
  64.       <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" doStaticCompression="true" doDynamicCompression="true" dynamicCompressionLevel="10" staticCompressionLevel="10" />
  65.       <staticTypes>
  66.         <add mimeType="text/*" enabled="true" />
  67.             <add mimeType="message/*" enabled="true" />
  68.             <add mimeType="application/javascript" enabled="true" />
  69.             <add mimeType="application/x-javascript" enabled="true" />
  70.             <add mimeType="application/json" enabled="true" />
  71.             <add mimeType="*/*" enabled="false" />
  72.       </staticTypes>
  73.           <dynamicTypes>
  74.             <add mimeType="text/*" enabled="true" />
  75.             <add mimeType="message/*" enabled="true" />
  76.             <add mimeType="application/javascript" enabled="true" />
  77.             <add mimeType="application/x-javascript" enabled="true" />
  78.             <add mimeType="application/json" enabled="true" />
  79.             <add mimeType="*/*" enabled="false" />
  80.           </dynamicTypes>
  81.     </httpCompression>
  82.  
  83.         <!-- Especificamos que se utilice el reemplazo de la respuesta cuando se produce un error en el servidor en vez de hacer una redirección. De está forma logramos que los códigos de estado devueltos sean correctos. -->
  84.     <httpErrors existingResponse="Replace" errorMode="Custom">
  85.       <remove statusCode="404" subStatusCode="-1" />
  86.       <error statusCode="404" subStatusCode="-1" path="/error.aspx?error=404" responseMode="ExecuteURL" />
  87.       <remove statusCode="500" subStatusCode="-1" />
  88.       <error statusCode="500" subStatusCode="-1" path="/error.aspx?error=500" responseMode="ExecuteURL" />
  89.     </httpErrors>
  90.  
  91.         <!-- Deshabilitamos el listado de directorios -->
  92.     <directoryBrowse enabled="false" />
  93.  
  94.         <!-- Deshabilitamos la validación de la configuración en modo integrado -->
  95.     <validation validateIntegratedModeConfiguration="false" />
  96.  
  97.     <!-- Deshabilitamos que todos los módulos se ejecuten en todas las peticiones -->
  98.     <modules runAllManagedModulesForAllRequests="false" />
  99.  
  100.         <!--
  101.        Establecemos los tipos MIME de todos los archivos que servimos.
  102.        IIS no sirve los archivos que desconoce su tipo MIME por seguridad.
  103.        Establecemos la cache en un año del cliente.
  104.        -->
  105.     <staticContent>
  106.           <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" cacheControlCustom="public" />
  107.       <remove fileExtension=".css" />
  108.       <mimeMap fileExtension=".css" mimeType="text/css" />
  109.       <remove fileExtension=".js" />
  110.       <mimeMap fileExtension=".js" mimeType="application/javascript" />
  111.       <remove fileExtension=".json" />
  112.       <mimeMap fileExtension=".json" mimeType="application/json" />
  113.       <remove fileExtension=".rss" />
  114.       <mimeMap fileExtension=".rss" mimeType="application/rss+xml; charset=UTF-8" />
  115.       <remove fileExtension=".html" />
  116.       <mimeMap fileExtension=".html" mimeType="text/html; charset=UTF-8" />
  117.       <remove fileExtension=".xml" />
  118.       <mimeMap fileExtension=".xml" mimeType="application/xml; charset=UTF-8" />
  119.       <remove fileExtension=".mp3" />
  120.       <mimeMap fileExtension=".mp3" mimeType="audio/mpeg" />
  121.       <remove fileExtension=".mp4" />
  122.       <mimeMap fileExtension=".mp4" mimeType="video/mp4" />
  123.       <remove fileExtension=".ogg" />
  124.       <mimeMap fileExtension=".ogg" mimeType="audio/ogg" />
  125.       <remove fileExtension=".ogv" />
  126.       <mimeMap fileExtension=".ogv" mimeType="video/ogg" />
  127.       <remove fileExtension=".webm" />
  128.       <mimeMap fileExtension=".webm" mimeType="video/webm" />
  129.       <remove fileExtension=".svg" />
  130.       <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
  131.       <remove fileExtension=".svgz" />
  132.       <mimeMap fileExtension=".svgz" mimeType="image/svg+xml" />
  133.       <remove fileExtension=".eot" />
  134.       <mimeMap fileExtension=".eot" mimeType="application/vnd.ms-fontobject" />
  135.       <remove fileExtension=".ttf" />
  136.       <mimeMap fileExtension=".ttf" mimeType="application/x-font-ttf" />
  137.       <remove fileExtension=".ttc" />
  138.       <mimeMap fileExtension=".ttc" mimeType="application/x-font-ttf" />
  139.       <remove fileExtension=".otf" />
  140.       <mimeMap fileExtension=".otf" mimeType="font/opentype" />
  141.       <remove fileExtension=".woff" />
  142.       <mimeMap fileExtension=".woff" mimeType="application/font-woff" />
  143.       <remove fileExtension=".crx" />
  144.       <mimeMap fileExtension=".crx" mimeType="application/x-chrome-extension" />
  145.       <remove fileExtension=".xpi" />
  146.       <mimeMap fileExtension=".xpi" mimeType="application/x-xpinstall" />
  147.       <remove fileExtension=".safariextz" />
  148.       <mimeMap fileExtension=".safariextz" mimeType="application/octet-stream" />
  149.       <remove fileExtension=".flv" />
  150.       <mimeMap fileExtension=".flv" mimeType="video/x-flv" />
  151.       <remove fileExtension=".f4v" />
  152.       <mimeMap fileExtension=".f4v" mimeType="video/mp4" />
  153.       <remove fileExtension=".ico" />
  154.       <mimeMap fileExtension=".ico" mimeType="image/x-icon" />
  155.       <remove fileExtension=".webp" />
  156.       <mimeMap fileExtension=".webp" mimeType="image/webp" />
  157.       <remove fileExtension=".htc" />
  158.       <mimeMap fileExtension=".htc" mimeType="text/x-component" />
  159.       <remove fileExtension=".vcf" />
  160.       <mimeMap fileExtension=".vcf" mimeType="text/x-vcard" />
  161.       <remove fileExtension=".torrent" />
  162.       <mimeMap fileExtension=".torrent" mimeType="application/x-bittorrent" />
  163.       <remove fileExtension=".cur" />
  164.       <mimeMap fileExtension=".cur" mimeType="image/x-icon" />
  165.     </staticContent>
  166.     <httpProtocol>
  167.       <customHeaders>
  168.         <!-- Establecemos la cabecera que indica que nuestra página solo puede aparecer en frames o iframes de nuestro propio dominio. -->
  169.                 <add name="X-Frame-Options" value="SAMEORIGIN" />
  170.  
  171.         <!-- Habilitamos la protección contra XSS en Internet Explorer. -->
  172.                 <add name="X-XSS-Protection" value="1; mode=block"/>
  173.  
  174.         <!-- Habilitamos la protección contra cambios de tipo MIME en Internet Explorer -->
  175.         <add name="X-Content-Type-Options" value="nosniff" />
  176.  
  177.         <!-- Eliminamos la cabecera X-Powered-By -->
  178.         <remove name="X-Powered-By" />
  179.  
  180.         <!--
  181.                Eliminamos la cabecera ETAG, si un recurso cambia lo mejor es que cambie de URL para que se vuelva a descargar o cambiar la fecha de modificación y utilizar la opción  If-Modified-Since.
  182.                -->
  183.                 <add name="ETAG" value="" />
  184.  
  185.         <!--
  186.                Forzamos a que Internet Explorer use la última versión de su motor de renderizado.
  187.                -->
  188.         <add name="X-UA-Compatible" value="IE=Edge" />
  189.       </customHeaders>
  190.     </httpProtocol>
  191.  
  192.         <!-- Establecemos default.aspx como el archivo por defecto de un directorio -->
  193.         <defaultDocument enabled="true">
  194.           <files>
  195.             <clear />
  196.             <add value="default.aspx" />
  197.           </files>
  198.         </defaultDocument>
  199.     <!--
  200.        Reglas de reescritura de URLs
  201.        Es necesario tener instalado el módulo "URL Rewrite Module 2.0"
  202.        -->
  203.         <rewrite>
  204.             <rules>
  205.                 <!-- Forzamos que el dominio salga siempre con www, excepto cuando ejecutamos el proyecto en local o empieza por www -->
  206.                 <rule name="WWW" stopProcessing="true">
  207.                     <match url="(.*)" />
  208.                     <conditions>
  209.                         <add input="{HTTP_HOST}" pattern="(.*)" />
  210.                         <add input="{HTTP_HOST}" pattern="^www\." negate="true" />
  211.                         <add input="{HTTP_HOST}" pattern="^localhost" negate="true" />
  212.                     </conditions>
  213.                     <action type="Redirect" url="http://www.{C:1}/{R:1}" redirectType="Permanent" />
  214.                 </rule>
  215.  
  216.                 <!--  Eliminamos default.aspx de la URL -->
  217.                 <rule name="Default Document" stopProcessing="true">
  218.                   <match url="^(.*)default\.aspx$" />
  219.                   <action type="Redirect" url="{R:1}" redirectType="Permanent" />
  220.                 </rule>
  221.  
  222.                 <!-- Convierte toda la url a minúscula, excepto cuando sea un archivo, un directorio, un manejador AJAX de ASP.NET o un bundle -->
  223.                 <rule name="Lower Case URLs" stopProcessing="true">
  224.                   <match url="[A-Z]" ignoreCase="false" />
  225.                     <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
  226.                       <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
  227.                       <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
  228.                       <add input="{URL}" pattern="^(.+)\.axd$" negate="true" />
  229.                       <add input="{URL}" pattern="^bundles/" negate="true" />
  230.                     </conditions>
  231.                     <action type="Redirect" url="{ToLower:{URL}}" redirectType="Permanent" />
  232.                   </rule>
  233.  
  234.                 <!--
  235.                Especificamos regla de reescritura para los bundles de ASP.NET
  236.                /bundles/css/asd12SDasdada -> /bundles/css?v=asd12SDasdada
  237.                -->
  238.                 <rule name="Bundles">
  239.                   <match url="^bundles/([^/]+)/(.+)$" />
  240.                   <action type="Rewrite" url="/bundles/{R:1}?v={R:2}" />
  241.                 </rule>
  242.  
  243.             </rules>
  244.         </rewrite>
  245.  
  246.   </system.webServer>
  247. </configuration>
RAW Paste Data