{"id":663,"date":"2016-03-09T20:41:39","date_gmt":"2016-03-09T20:41:39","guid":{"rendered":"https:\/\/possibleapp.com\/blog\/?p=663"},"modified":"2016-03-09T20:41:39","modified_gmt":"2016-03-09T20:41:39","slug":"10-snippets-de-htaccess-que-haran-las-delicias-de-todo-programador-web","status":"publish","type":"post","link":"https:\/\/possibleapp.com\/blog\/2016\/03\/10-snippets-de-htaccess-que-haran-las-delicias-de-todo-programador-web\/","title":{"rendered":"10 snippets de .htaccess que har\u00e1n las delicias de todo programador web"},"content":{"rendered":"<p>El fichero .htaccess de Apache es el coraz\u00f3n de tu servidor web y lleva el tim\u00f3n sobre c\u00f3mo tu sitio web reaccionar\u00e1 a diferentes acciones realizadas por tus visitantes. Es por eso que he compilado 10 snippets para .htaccess alucinantes que mejorar\u00e1n tu proyecto web de muchos maneras: redirecciones, rendimiento, facilidad de uso&#8230;<\/p>\n<p>Todos los snippets que encuentres m\u00e1s abajo deben ser pegados en tu fichero .htaccess, que debe estar localizado en el directorio ra\u00edz de tu servidor Apache.<\/p>\n<p><strong>Atenci\u00f3n. Realiza una copia de seguridad de tu archivo .htaccess antes de llevar a cabo alg\u00fan cambio.<\/strong><\/p>\n<h3>Poner una barra al final de la url<\/h3>\n<p>Muchos de mis clientes me han pedido que aparezca siempre la barra diagonal al final de todas sus URL. Parece ser que es muy bueno para el SEO. El siguiente snippet agregar\u00e1 siempre una barra diagonal en las URL de tu sitio web.<\/p>\n<pre>&lt;IfModule mod_rewrite.c&gt;\r\n\u00a0RewriteCond %{REQUEST_URI} \/+[^.]+$\r\n\u00a0RewriteRule ^(.+[^\/])$ %{REQUEST_URI}\/ [R=301,L]\r\n&lt;\/IfModule&gt;<\/pre>\n<h3>Prevenir el hotlinking<\/h3>\n<p>El hotlinking (el acto de enlazar y utilizar im\u00e1genes de otros sitios webs) es, desafortunadamente, un pr\u00e1ctica com\u00fan que puede afectar negativamente a tu ancho de banda. Es \u00fatil snippet redirigir\u00e1 todas las im\u00e1genes enlazadas por webs de terceros a una imagen espec\u00edfica, definida en la l\u00ednea 6<\/p>\n<pre>RewriteEngine On\r\n#Replace ?mysite.com\/ with your blog url\r\nRewriteCond %{HTTP_REFERER} !^http:\/\/(.+.)?mysite.com\/ [NC]\r\nRewriteCond %{HTTP_REFERER} !^$\r\n#Replace \/images\/nohotlink.jpg with your \"don't hotlink\" image url\r\nRewriteRule .*.(jpe?g|gif|bmp|png)$ \/images\/nohotlink.jpg [L]<\/pre>\n<h3>Redireccionar dispositivos m\u00f3viles<\/h3>\n<p>Si tu sitio web a\u00fan no cuenta con un dise\u00f1o responsive a\u00fan, puede ser muy \u00fatil el redirigir a aquellos usuarios que te visiten desde un dispositivo m\u00f3vil a una versi\u00f3n espec\u00edfica para m\u00f3viles de tu sitio web<\/p>\n<pre>RewriteEngine On\r\nRewriteCond %{REQUEST_URI} !^\/m\/.*$\r\nRewriteCond %{HTTP_ACCEPT} \"text\/vnd.wap.wml|application\/vnd.wap.xhtml+xml\" [NC,OR]\r\nRewriteCond %{HTTP_USER_AGENT} \"acs|alav|alca|amoi|audi|aste|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-\" [NC,OR]\r\nRewriteCond %{HTTP_USER_AGENT} \"dang|doco|eric|hipt|inno|ipaq|java|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-\" [NC,OR]\r\nRewriteCond %{HTTP_USER_AGENT}\u00a0 \"maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|opwv\" [NC,OR]\r\nRewriteCond %{HTTP_USER_AGENT} \"palm|pana|pant|pdxg|phil|play|pluc|port|prox|qtek|qwap|sage|sams|sany\" [NC,OR]\r\nRewriteCond %{HTTP_USER_AGENT} \"sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo\" [NC,OR]\r\nRewriteCond %{HTTP_USER_AGENT} \"teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|w3cs|wap-|wapa|wapi\" [NC,OR]\r\nRewriteCond %{HTTP_USER_AGENT} \"wapp|wapr|webc|winw|winw|xda|xda-\" [NC,OR]\r\nRewriteCond %{HTTP_USER_AGENT} \"up.browser|up.link|windowssce|iemobile|mini|mmp\" [NC,OR]\r\nRewriteCond %{HTTP_USER_AGENT} \"symbian|midp|wap|phone|pocket|mobile|pda|psp\" [NC]\r\n#------------- The line below excludes the iPad\r\nRewriteCond %{HTTP_USER_AGENT} !^.*iPad.*$ \r\n#-------------\r\nRewriteCond %{HTTP_USER_AGENT} !macintosh [NC] #*SEE NOTE BELOW\r\nRewriteRule ^(.*)$ \/m\/ [L,R=302]<\/pre>\n<h3>Forzar la descarga de extensiones espec\u00edficas<\/h3>\n<p>Imagina que por razones X necesitas forzar la descarga de una extensi\u00f3n en concreto, como pueden ser los MP3 o los XLS. Estos snippets prevendr\u00e1n que el navegador del visitante pueda leer el archivo y forzar\u00e1 la descarga por defecto.<\/p>\n<pre>&lt;Files *.xls&gt;\r\n\u00a0 ForceType application\/octet-stream\r\n\u00a0 Header set Content-Disposition attachment\r\n&lt;\/Files&gt;\r\n&lt;Files *.eps&gt;\r\n\u00a0 ForceType application\/octet-stream\r\n\u00a0 Header set Content-Disposition attachment\r\n&lt;\/Files&gt;<\/pre>\n<h3>Embeber una fuente de una web externa en Firefox<\/h3>\n<p>Cuando embebemos una fuente, Firefox no nos permite embeberla desde un sitio web externo. Utilizando este snippet para .htaccess que puedes ver m\u00e1s abajo, puedes obviar esta limitaci\u00f3n.<\/p>\n<pre>&lt;FilesMatch \".(ttf|otf|eot|woff)$\"&gt;\r\n&lt;IfModule mod_headers.c&gt;\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 Header set Access-Control-Allow-Origin \"http:\/\/yourdomain.com\"\r\n&lt;\/IfModule&gt;\r\n&lt;\/FilesMatch&gt;<\/pre>\n<h3>Incrementa la velocidad de tu web con este cacheo para .htaccess<\/h3>\n<p>Este es, probablemente, el snippet m\u00e1s \u00fatil de toda la lista. Utilizando este simple cacheo de .htaccess, puedes mejorar dr\u00e1sticamente la velocidad de tu sitio web. \u00a1Un snippet que siempre debes tener a mano en tu caja de herramientas!<\/p>\n<pre># 1 A\u00d1O\r\n&lt;FilesMatch \".(ico|pdf|flv)$\"&gt;\r\nHeader set Cache-Control \"max-age=29030400, public\"\r\n&lt;\/FilesMatch&gt;\r\n# 1 SEMANA\r\n&lt;FilesMatch \".(jpg|jpeg|png|gif|swf)$\"&gt;\r\nHeader set Cache-Control \"max-age=604800, public\"\r\n&lt;\/FilesMatch&gt;\r\n# 2 DIAS\r\n&lt;FilesMatch \".(xml|txt|css|js)$\"&gt;\r\nHeader set Cache-Control \"max-age=172800, proxy-revalidate\"\r\n&lt;\/FilesMatch&gt;\r\n# 1 MIN\r\n&lt;FilesMatch \".(html|htm|php)$\"&gt;\r\nHeader set Cache-Control \"max-age=60, private, proxy-revalidate\"\r\n&lt;\/FilesMatch&gt;<\/pre>\n<h3>Redirige diferentes formatos a un feed \u00fanico<\/h3>\n<p>Hace a\u00f1os, exist\u00edan diferentes formatos de feed como RSS, Atom o Rdf. En estos d\u00edas, RSS es definitivamente el m\u00e1s utilizado. Este snippet te permite redirigir todos los formatos de feeds a un \u00fanico feed. Este snippet puede ser utilizado tal cual tambi\u00e9n en WordPress<\/p>\n<pre>&lt;IfModule mod_alias.c&gt;\r\n\u00a0RedirectMatch 301 \/feed\/(atom|rdf|rss|rss2)\/?$ http:\/\/example.com\/feed\/\r\n\u00a0RedirectMatch 301 \/comments\/feed\/(atom|rdf|rss|rss2)\/?$ http:\/\/example.com\/comments\/feed\/\r\n&lt;\/IfModule&gt;<\/pre>\n<h3>Configura tu web para los v\u00eddeos de HTML5<\/h3>\n<p>HTML5 cuenta con un mont\u00f3n de emocionantes opciones para el mundo del desarrollo web. Entre sus interesantes caracter\u00edsticas est\u00e1 la capacidad de reproducir v\u00eddeos sin necesidad de utilizar Flash. Sin embargo, tienes que configurar el servidor para que funcione correctamente con los \u00faltimos est\u00e1ndares de v\u00eddeo HTML5. Este snippet te ayudar\u00e1 definitivamente.<\/p>\n<pre>RewriteCond %{REQUEST_FILENAME} !-f\r\nRewriteCond %{REQUEST_FILENAME} !-d\r\nRewriteCond %{REQUEST_URI} !=\/favicon.ico\r\nAddType video\/ogg .ogv\r\nAddType video\/ogg .ogg\r\nAddType video\/mp4 .mp4\r\nAddType video\/webm .webm\r\nAddType application\/x-shockwave-flash swf<\/pre>\n<h3>Log de errores de PHP<\/h3>\n<p>En lugar de mostrar errores de PHP en tu sitio web (sobre todo para prevenir a los piratas) este snippet registrar\u00e1 en un archivo .log todos los errores, al mismo tiempo que los oculta a los visitantes.<\/p>\n<pre># display no errs to user\r\nphp_flag display_startup_errors off\r\nphp_flag display_errors off\r\nphp_flag html_errors off\r\n# log to file\r\nphp_flag log_errors on\r\nphp_value error_log \/location\/to\/php_error.log<\/pre>\n<h3>Ejecuta PHP dentro de archivos de Javascript<\/h3>\n<p>A la hora de programar en JavaScript, puede ser muy \u00fatil utilizar PHP dentro de los archivos .js, por ejemplo, para recuperar datos de una base de datos. Aqu\u00ed tienes un snippet que permite el uso de PHP dentro de archivos JS.<\/p>\n<pre>AddType application\/x-httpd-php .js\r\nAddHandler x-httpd-php5 .js\r\n\r\n&lt;FilesMatch \".(js|php)$\"&gt;\r\nSetHandler application\/x-httpd-php\r\n&lt;\/FilesMatch&gt;<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>El fichero .htaccess de Apache es el coraz\u00f3n de tu servidor web y lleva el tim\u00f3n sobre c\u00f3mo tu sitio web reaccionar\u00e1 a diferentes acciones realizadas por tus visitantes. Es por eso que he compilado 10 snippets para .htaccess alucinantes que mejorar\u00e1n tu proyecto web de muchos maneras: redirecciones, rendimiento, facilidad de uso&#8230; Todos los [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":664,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-663","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-general"],"_links":{"self":[{"href":"https:\/\/possibleapp.com\/blog\/wp-json\/wp\/v2\/posts\/663","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/possibleapp.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/possibleapp.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/possibleapp.com\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/possibleapp.com\/blog\/wp-json\/wp\/v2\/comments?post=663"}],"version-history":[{"count":1,"href":"https:\/\/possibleapp.com\/blog\/wp-json\/wp\/v2\/posts\/663\/revisions"}],"predecessor-version":[{"id":665,"href":"https:\/\/possibleapp.com\/blog\/wp-json\/wp\/v2\/posts\/663\/revisions\/665"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/possibleapp.com\/blog\/wp-json\/wp\/v2\/media\/664"}],"wp:attachment":[{"href":"https:\/\/possibleapp.com\/blog\/wp-json\/wp\/v2\/media?parent=663"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/possibleapp.com\/blog\/wp-json\/wp\/v2\/categories?post=663"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/possibleapp.com\/blog\/wp-json\/wp\/v2\/tags?post=663"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}