¿Cómo configurar una redirección a otra URL en PHP antes de que se cargue la página? Redirección php euroliga masculina ucp

6.1K

Supongamos que desea mostrar la página https://example.com/final.php a los usuarios que van a la página https://example.com/initial.php. Esto se puede hacer con unos pocos métodos PHP, JavaScript y HTML. En este artículo, cubriremos cada uno de los métodos que puede utilizar para redirigir PHP a otra página.

Aquí hay algunas variables que usaremos:

Usando la función PHP header() para redirigir una URL

Si desea agregar una redirección de inicial.php a final.php, puede colocar el siguiente código en la página web de inicial.php. Envía un nuevo encabezado de ubicación al navegador:

Aquí usamos la función PHP header() para crear la redirección. Debe colocar este código antes de cualquier HTML o texto. De lo contrario, recibirá un error indicando que el encabezado ya ha sido enviado. También puede utilizar el almacenamiento en búfer de salida para evitar este error al enviar encabezados. El siguiente ejemplo muestra esta técnica de redirección de PHP en acción:

Para realizar una redirección usando la función header(), la función ob_start() debe ser la primera función en el script PHP. Esto evitará que se produzcan errores en el encabezado.

Como medida adicional, puede agregar die() o exit() inmediatamente después de la redirección del encabezado para que el resto del código de la página web no se ejecute. En algunos casos, es posible que los robots de búsqueda o los navegadores no presten atención a la indicación en el encabezado Ubicación. ¿Cuáles son las amenazas potenciales a la seguridad del sitio?

Para ser claros: die() o exit() no tienen nada que ver con las redirecciones. Se utilizan para evitar que se ejecute el resto del código de la página web.

Al redirigir a una página en PHP, se recomienda utilizar URL absolutas al especificar el valor del encabezado Ubicación. Pero las URL relativas también funcionarán. También puede utilizar esta función para redirigir a los usuarios a sitios o páginas web externos.

Generar código de redireccionamiento JavaScript usando la función PHP echo()

Esta no es una solución PHP pura. Sin embargo, también es eficaz. Puede utilizar la función PHP echo() para generar el código JavaScript que manejará la redirección.

Si utiliza esta solución, no tendrá que utilizar el almacenamiento en búfer de salida. Esto también evita que se produzcan errores relacionados con el envío de encabezados.

A continuación se muestran algunos ejemplos que utilizan diferentes metodos JavaScript para redirigir desde la página actual a otra:

El único inconveniente de este método de redireccionamiento a otro sitio PHP es que JavaScript se ejecuta en el lado del cliente. Y es posible que sus visitantes tengan JavaScript deshabilitado.

Usar metaetiquetas HTML para la redirección

También puedes utilizar HTML básico para realizar la redirección. Puede parecer poco profesional, pero funciona. Y no tienes que preocuparte de que JavaScript esté deshabilitado en tu navegador o de haber enviado previamente un error de encabezado:

También puede utilizar la última línea del ejemplo anterior para actualizar automáticamente la página cada "n" segundos. Por ejemplo, el siguiente código actualizará automáticamente la página cada 8 segundos.

Hola amigos. Hoy me gustaría discutir un tema muy trillado, pero siempre relevante: este es el redireccionamiento 301 (redireccionamiento permanente 301), en la comunidad SEO, y sin formalidades, esto es exactamente lo que se entiende por la palabra "redireccionamiento". Técnicamente, esta es la respuesta del servidor a una solicitud; esta respuesta tiene un código de 301, que indica que la dirección de la solicitud se ha movido permanentemente. Como resultado de todas estas astutas maquinaciones, deberíamos recibir una nueva dirección final.

Creo que estos aspectos técnicos no son necesarios y, por lo tanto, quiero hablar sobre cosas aplicadas: cuándo y en qué situaciones es mejor usar una redirección, cómo y con qué comandos se pueden configurar reglas de redirección, etc. También consideraremos herramientas y servicios con los que podrá comprobar la exactitud de las redirecciones.

Como el post resultó ser muy largo, decidí hacer un índice para tu comodidad:

¿Cuándo DEBERÍAS hacer una redirección 301?

En primer lugar, se utiliza una redirección cuando una página (un grupo de páginas o una sección completa) ha cambiado su dirección; la mayoría de las veces esto sucede cuando se cambia la estructura del sitio, se cambia el nombre de la parte principal de la URL o se cambia la dirección. Se cambia el principio de formación de direcciones (en otras palabras, CNC). Desafortunadamente, no todo el mundo piensa en esto cuando cambia algo en el sitio y, como resultado, aparecen muchos duplicados, lo que conduce a la pérdida de posiciones o incluso a la imposición de sanciones por parte de los motores de búsqueda. En mi trabajo, me encuentro muy a menudo con situaciones de este tipo y cuesta mucho nervios corregir todo y neutralizar las consecuencias. Por mi parte, puedo recomendar que antes de cualquier trabajo de cambio de tipo de CNC o alteración de la estructura, se haga un plano de la estructura actual del sitio, todas sus secciones y ejemplos de páginas finales. Todo esto deberá comprobarse una vez finalizado el trabajo, de modo que cuando vayamos a la dirección anterior lleguemos a la nueva y el servidor proporcione una redirección con el código 301 (y no 302).

El siguiente uso común de las redirecciones 301 es cambiar la dirección del sitio o pegar espejos. Si decide cambiar la dirección del sitio web en relación con el cambio de marca de la empresa o registra un dominio nuevo, más bonito y más corto para indicarlo en productos promocionales impresos, es muy importante que al acceder a la dirección del dominio anterior, el usuario termina en la misma página (y no en pagina de inicio), pero en un dominio nuevo. En cuanto a los sitios promocionales, normalmente constan de una o dos páginas, cuyos enlaces conducen al sitio principal, o cuando visita el sitio promocional, se le redirige inmediatamente a una página especial en el sitio principal. A veces, al crear un sitio web, se registran varios dominios a la vez, por ejemplo, debido a la ortografía ambigua del nombre de la empresa en latín. Para garantizar que al escribir intuitivamente una dirección, el usuario llegue al lugar correcto y se registren varios dominios, es muy importante que se produzcan redireccionamientos 301 desde todos los dominios "auxiliares" a una dirección principal. En ningún caso un mismo sitio web debe ser accesible para todas las direcciones.

Y también sobre los espejos: puede suceder que su sitio esté disponible en las direcciones http://www.site.ru, http://site.ru y https://site.ru (este último es raro, pero sucede): estos son todos los errores clásicos que no se deben cometer, y las redirecciones 301 participan en su solución. Al igual que en el caso de diferentes direcciones de sitios web, debes decidir cuál es el mirror principal (con www o sin www) y configurar redireccionamientos al mirror principal. Por supuesto, los motores de búsqueda no son estúpidos y en tales situaciones a menudo se las arreglan solos, y usted también puede ayudarlos haciendo configuración correcta en paneles de webmasters y en robots.txt (para Yandex, directiva de host). Pero el SEO es un asunto delicado y no confiaría en la suerte, sino que utilizaría un método probado.

A veces ocurre una situación muy desagradable cuando una copia del sitio está disponible no solo cuando ingresa el nombre de dominio en la barra de direcciones, sino también la dirección IP del servidor. Es poco probable que esta situación ocurra en un hosting compartido, pero si tienes un servidor dedicado, puede suceder fácilmente. Esta puede ser la razón de la configuración incorrecta del servidor: deshabilitar el acceso al acceder a una dirección IP ayudará a resolver el problema, pero la mejor solución aquí es una redirección 301 a nivel del servidor web (Apache o Nginx). Hace un par de meses tuve una situación así: tenía un servidor dedicado en el que colgaban algunos de los sitios, pero para uno de los sitios decidí tomar otro servidor separado. Transferí el sitio, todo funcionó como un reloj y un día encontré un clon de mi sitio en los resultados de Google (conmoción, pánico), resultó que esta era la dirección IP de mi nuevo servidor y, por supuesto, mi sitio. vive en él, y cuando se contacta, el servidor da una respuesta 200 OK y Google lo ha indexado por completo. En el servidor anterior no existía tal problema, inicialmente se configuró una redirección 301 desde la IP al dominio especificado como principal para esta IP. Ahora he aprendido de amargas experiencias y siempre reviso esas cosas: tenga cuidado y no repita los errores. El problema se resolvió agregando una redirección al dominio principal a las configuraciones del servidor web nginx; mostraré un ejemplo del código en la parte práctica del post a continuación.

La situación es similar a la anterior: cuando se localiza una copia del sitio y se puede acceder a ella a través de un dominio de prueba de servicio, por ejemplo, como site.hosting.ru. Estos casos también ocurren en mi práctica y, a diferencia del caso anterior, esto es típico del hosting virtual. ¿Por qué existe esto? Por ejemplo, aún no ha comprado un dominio o está transfiriendo un sitio de un alojamiento a otro, pero los servidores NS del dominio no se han modificado o aún no se han actualizado. Registros DNS en el proveedor. En tales situaciones lo hacen direcciones de prueba, donde podrás configurar e instalar todo antes de redirigir la dirección del sitio al nuevo hosting. Y algunos proveedores de alojamiento pecan al no bloquear el acceso a dichas direcciones técnicas y ni siquiera prohibir su indexación. Si se encuentra con esta situación desagradable, debería intentar registrar una redirección 301 desde la dirección técnica a la principal en el archivo .htaccess.

Y, por supuesto, a los redireccionamientos 301 les gusta mucho utilizar el SEO adecuado para combatir varias páginas duplicadas. ¿Por qué sólo los SEO adecuados? Sí, porque las personas equivocadas ingresaron al sitio web del cliente y, lo que es muy probable, comenzaron a comprar enlaces sin siquiera visitar el sitio; por desgracia, esto no es raro. Periódicamente se acercan a mí clientes que quieren verificar la integridad de sus contratistas/empleados responsables de optimizar y promover el sitio, qué tan bien va el trabajo - - y hasta ahora nunca ha sucedido que no haya encontrado errores o deficiencias en los sitios. Así que tenga en cuenta que siempre estaré encantado de ayudarle. Volvamos a los duplicados: creo que en lugar de bloquear la indexación de duplicados, es necesario redirigir a la dirección principal, y esto no es tan interesante. Por supuesto, hay muchos casos en los que las tomas son forzadas y luego no puedes prescindir de la canonización, pero si tienes la oportunidad de realizar una redirección, asegúrate de hacerlo. Casos frecuentes de duplicados que siempre hay que comprobar: direcciones con y sin barra al final, direcciones con parámetros y etiquetas. A continuación te cuento cómo solucionarlo.

¿Cuándo se puede hacer una redirección 301?

No puedes escribir mucho en esta sección, pero lo intentaré. Realmente espero que después de leer me agregues un par de ideas en los comentarios.

El redireccionamiento 301 se puede utilizar como respuesta del servidor en lugar de un error 404 Extraviado– en otras palabras, un usuario que sigue un enlace incorrecto o una página inexistente no verá un mensaje que diga: "Lo sentimos, esta página ya no existe", sino que será transferido a otra página existente. Este es un punto muy controvertido entre los expertos, por lo que no impongo mi opinión a nadie. Pero prefiero usar una redirección en lugar de un error 404, y hay varias opciones para el desarrollo de eventos... Mira, hay 2 categorías de errores 404: la primera es clásica, cuando la página realmente ha sido eliminada, la el segundo es cuando aparece el error debido a enlaces externos torcidos. En el primer caso, probablemente no deberías realizar una redirección, sino dejar el error 404 como está. Pero en el segundo caso, debes encargarte de redirigir a la dirección URL correcta, si se puede restaurar desde un enlace roto, o de redirigir a la página principal (o categoría).

Cuándo NO hacer una redirección 301

Unas pocas palabras sobre cuándo una redirección puede perjudicarle y, por tanto, no debe utilizarse en las siguientes situaciones.

Lo más importante es evitar cometer errores, no debes involucrarte con redirecciones si no estás 100% seguro de lo que estás haciendo o dudas de algo. Tómalo como un consejo amistoso :)

No se debe utilizar una redirección permanente para soluciones temporales, esto se desprende de su nombre: para una reubicación temporal, utilice 302 Movido temporalmente. En este caso, las páginas no se pegarán entre sí y la página con la redirección se podrá restaurar en cualquier momento.

Si hay problemas con su dominio, por ejemplo, filtros, prohibiciones, etc., y decide cambiar la dirección del sitio (dominio), entonces no debe realizar una redirección 301 del dominio anterior al nuevo; como resultado , “pegarás” y todos los problemas de lo viejo. Es decir, al final nada cambiará. Sí, desde hace algún tiempo existe una solución para salir del filtro de Google Penguin mediante una redirección 301 completa del dominio antiguo al nuevo. De hecho, todas las posiciones volvieron al nivel anterior a las sanciones, y esto parecía ser una panacea para el malvado Pingüino, pero con la siguiente actualización del algoritmo, esta característica se tuvo en cuenta y el nuevo dominio también cayó bajo el filtro. Como resultado, nada mejoró después del cambio de dominio. Si ya ha decidido cambiar el dominio, puede intentar transferir todo el contenido al nuevo dominio, eliminarlo en el anterior y colocar un talón con un mensaje sobre la mudanza, o mejor aún, comenzar de nuevo. desde cero.

Hay muchas formas de realizar una redirección 301: a través de htaccess, php, javascript, configuración del servidor, etc. - por lo que no debes intentar utilizar todos los métodos a la vez, ya que existe la posibilidad de que se produzcan "desacuerdos" entre diferentes caminos y puede, por ejemplo, obtener una redirección cíclica infinita.

Cuando trabaja con una estructura de sitio compleja o rediseña un portal grande, a menudo ocurren múltiples redirecciones o cadenas largas. Esto significa que la redirección no ocurre en un paso, sino en dos o más; esta es una mala situación y debe evitarse si es posible. Cuando haces clic en este enlace robot de búsqueda, habiendo recibido varias redirecciones seguidas, puede pensar que lo están engañando y dejar de seguir y dejar de tener en cuenta los enlaces por completo. Aquí hay un ejemplo de mi práctica: una vez encontré un sitio para una auditoría con una cadena tan inesperada:

http://site.ru/tax/term/30 ->
http://www.site.ru/tax/term/30 ->
http://www.site.ru/tax/term/30/ ->
http://www.site.hosting.ru/404.php ->
http://www.site.ru/404.php

Y al final, la página http://www.site.ru/404.php, que debería dar un error 404, da una respuesta 200 OK. Esto incluso me dejó alucinado, ¡pero imagina lo que pensaría un robot de búsqueda si se metiera en un carrusel así! No solo participaron en la cadena tres dominios diferentes, sino que la página de error también dice que no es un error y debe indexarse.

Si es posible, esfuércese por que no haya redirecciones dentro del sitio; si los enlaces externos al sitio no se pueden corregir y una redirección es inevitable, entonces se deben corregir los enlaces internos. Es posible que esto no afecte la calidad de la indexación y la clasificación, pero no puede estar seguro y, por lo tanto, es mejor evitar situaciones tan controvertidas. Uno maravilloso le ayudará a rastrear las redirecciones internas y, en general, los errores dentro del sitio.

Al crear reglas de redireccionamiento en .htaccess, excluya las direcciones reales de directorios y archivos en el servidor y controle la selección. La situación de un sitio que una vez me auditaron fue que en la lucha contra páginas de categorías duplicadas con y sin barra al final, el webmaster se exageró un poco y, por el contrario, sólo agravó el problema. Las reglas de reescritura no solo afectaron a los scripts js y archivos de estilo css reales, provocando que dejaran de funcionar correctamente, sino que también algunas páginas recibieron una barra diagonal innecesaria al final y aparecieron duplicados. Amigos, asegúrese cuidadosamente de que las reglas que cree se apliquen solo al grupo de direcciones con el que está trabajando y limite todas las demás.

Para buscar páginas problemáticas y sus direcciones de las que necesita deshacerse, utilice las capacidades de los paneles para webmasters de Yandex y Google. Para Yandex Webmaster: seleccione un sitio -> Indexación de sitios -> Páginas excluidas. Para Google Webmaster: Seleccione sitio -> Optimización -> Optimización HTML; Y también: Seleccione el sitio -> Configuración -> Parámetros de URL.

Funciones de indexación y reindexación de redirecciones en Yandex y Google. Cuando tenga problemas con duplicados y direcciones problemáticas, por supuesto, esperará a que se eliminen los errores de los paneles del webmaster; aquí hay algunas características. Con Google, todo es simple: usted configura las redirecciones, los cambios se indexarán dentro de 2 semanas, al mismo tiempo los errores comenzarán a desaparecer del panel del webmaster, generalmente después de un mes todos los errores desaparecen. Con Yandex hay una sutileza, y esta es la siguiente: después de configurar las redirecciones, puedes esperar una eternidad hasta que los errores desaparezcan del panel. Una vez esperé seis meses hasta que escribí al soporte, donde me informaron que además Para redirigir, es necesario cerrar adicionalmente las páginas problemáticas en robots.txt y solo entonces desaparecerán del panel del webmaster.

Redirección permanente 301 a través de .htaccess

Este método de instalación de redireccionamientos es el más popular y sencillo. Aunque, debo admitir, no todo es tan simple como parece, por eso planeo escribir una publicación separada sobre htaccess. En el lado positivo este método Cabe señalar que la redirección se activa a nivel del servidor y antes de que comience el procesamiento de cualquier script del sitio y no conlleva ninguna carga adicional.

Probablemente ya tengas un archivo .htaccess en tu servidor (en la raíz, donde está el index.php principal). Si este archivo no es visible:

  • Verifique la configuración del administrador ftp, puede ocultar sistemas y archivos, que es el archivo htaccess
  • Ir a administrador de archivos a través del panel de control del proveedor de alojamiento y verifique los permisos del archivo. No me refiero a CHMOD, sino a un grupo y un usuario, por ejemplo, puede haber usuario root y te conectas vía ftp utilizando el acceso de usuario del propietario del dominio.
  • Es posible que el archivo simplemente no exista :) Entonces debería crearse, pero en Windows a veces surge un problema, porque de hecho, el sistema ve el archivo .htaccess como un archivo sin nombre y solo con una extensión. Sugiero una forma sencilla: cree un archivo txt normal, agregue la línea "RewriteEngine On" (sin comillas), cargue el archivo txt en el servidor, cambie el nombre del archivo a .htaccess en el servidor

La mayoría de las ediciones relacionadas con la redirección deben escribirse al principio del archivo, después de la línea "RewriteEngine On", para que estas reglas se procesen primero. Es importante seguir la secuencia de acciones, porque Los comandos son procesados ​​por el servidor línea por línea desde el principio hasta la primera aparición. En otras palabras, siempre debes comenzar con una muestra particular y terminar con una muestra más general.

Veamos algunos de los ejemplos más comunes y útiles:

Redirección 301 para un dominio de www.site.ru a site.ru

RewriteCond %(HTTP_HOST) !^www\.(.*) RewriteRule ^(.*)$ http://www.%1/$1

Las opciones de redireccionamiento anteriores funcionan muy bien y no requieren ningún cambio de su parte; simplemente inserte el archivo en el archivo .htaccess. Sin embargo, para estar 100% seguro, te aconsejaría otra opción:

RewriteCond %(HTTP_HOST) !^www.site.ru$ RewriteRule ^(.*)$ http://www.site.ru/$1

RewriteCond %(HTTP_HOST) !^www.site.ru$ RewriteRule ^(.*)$ http://www.site.ru/$1

RewriteCond %(HTTP_HOST) !^site.ru$ RewriteRule ^(.*)$ http://site.ru/$1

RewriteCond %(HTTP_HOST) !^site.ru$ RewriteRule ^(.*)$ http://site.ru/$1

El primero es para quienes tienen un dominio principal con www, el segundo es para quienes no tienen www. En consecuencia, en ambos ejemplos deberá ingresar el nombre de su dominio en lugar de "sitio".
Entonces, ¿por qué estas opciones son mejores? Muy simple, verifican no sólo la ausencia/presencia de www en el nombre de dominio, sino que también verifican que el nombre de dominio cumpla plenamente.
Ejemplo en vivo: Seguramente se ha encontrado con el hecho de que inesperadamente un sitio puede ser indexado por una dirección de servicio en el hosting (dicha dirección se emite para que se pueda acceder al sitio antes de vincularlo a su dominio real), algún espejo o incluso una IP. ¡DIRECCIÓN! Así, las reglas universales sólo verificarán la ausencia/presencia de www, y no importa a qué dominio acceda el usuario o robot de búsqueda.
Entonces, al utilizar la opción avanzada, estará 146% seguro de que se podrá acceder a su sitio única y exclusivamente utilizando el nombre de dominio que especificó personalmente y teniendo en cuenta www. ¡Solo uso esta opción y te la recomiendo!

Redirección 301 de http a https

A la luz de la transición masiva de sitios a un protocolo seguro, es necesario saber cómo redirigir de http a https. Por cierto, si aún no has elegido un certificado SSL, deberías leer mi publicación sobre .

A continuación te ofrezco varias opciones para una redirección 301 del protocolo http a https, que pueden funcionar o no dependiendo de la configuración de tu servidor, pero una de las reglas definitivamente te convendrá:

RewriteCond %(HTTPS) !=on RewriteRule ^(.*)$ https://%(HTTP_HOST)/$1

RewriteCond %(HTTPS) !=on RewriteRule ^(.*)$ https://%(HTTP_HOST)/$1

RewriteCond %(SERVER_PORT) !^443 $ RewriteRule ^(.*)$ https://%(SERVER_NAME)%(REQUEST_URI)

RewriteCond %(SERVER_PORT) !^443$ RewriteRule ^(.*)$ https://%(SERVER_NAME)%(REQUEST_URI)

RewriteCond %(ENV:HTTPS) !en RewriteRule ^(.*)$ https://%(HTTP_HOST)%(REQUEST_URI)

RewriteCond %(ENV:HTTPS) !en RewriteRule ^(.*)$ https://%(HTTP_HOST)%(REQUEST_URI)

RewriteCond %(HTTP:X-HTTPS) !1 RewriteRule ^(.*)$ https://%(HTTP_HOST)/$1

RewriteCond %(HTTP:X-HTTPS) !1 RewriteRule ^(.*)$ https://%(HTTP_HOST)/$1

RewriteCond %(HTTPS) desactivado RewriteCond %(HTTP:X-Forwarded-Proto) !https RewriteRule ^(.*)$ https://%(HTTP_HOST)%(REQUEST_URI)

Redirigir desde https al protocolo http (sinceramente, no sé por qué podrías necesitar esto):

RewriteCond %(HTTPS) = en RewriteRule ^(.*)$ http://%(HTTP_HOST)/$1

RewriteCond %(HTTPS) = en RewriteRule ^(.*)$ http://%(HTTP_HOST)/$1

Recientemente escribí muy instrucciones detalladas. Si está planeando pasar de https a https, ¡se debe leerlo!

Aportaré algo de claridad al galimatías incomprensible:

  • RewriteCond denota una condición que, si coincide, ejecutará RewriteRule. Mediante el uso expresiones regulares Se especifican patrones de cuerdas.
  • Variables del servidor:
    • %(REQUEST_URI) - parte de la URL sin nombre de dominio ni parámetros GET, por ejemplo, para la página que estás leyendo actualmente: blog/post/4393,
    • %(HTTP_HOST) - anfitrión o Nombre de dominio, por ejemplo: sitio web
    • %(QUERY_STRING): una cadena con un conjunto de parámetros GET, es decir, la parte de la URL después del signo de interrogación (y antes de la cuadrícula de anclaje, si la hay).
    • %(REQUEST_FILENAME) — ruta completa V sistema de archivos servidor a un archivo o script correspondiente a esta solicitud..php, pero en el sistema de archivos del servidor esta es la terrible línea /var/www/site/data/www/site/index.php.
      Sucede que al realizar una redirección obtienes un resultado inesperado, por ejemplo, querías eliminar los parámetros post=17434801_4060 en la dirección http://site.ru/page-name?post=17434801_4060 , indica las reglas correspondientes ( se escribirán más adelante), pero al final obtuvimos la línea http://site.ru/usr/local/www/site.ru/www/page-name - nos deshicimos de los parámetros, pero obtuvimos un dirección extraña. Todo esto se debe a que no especificó una directiva RewriteBase / al principio del archivo después de RewriteEngine On, que establece una URL base específica para transformaciones en el contexto de un directorio.
  • Los metacaracteres se utilizan para definir grupos de caracteres o "etiquetas" en un patrón:
    • ^ — marca de inicio de línea,
    • $ es la marca de final de línea,
    • ! – negación,
    • \ - barra diagonal de escape, le permite considerar el metacarácter que le sigue como un carácter normal,
    • . – punto, denota cualquier carácter, pero solo uno,
    • () – agrupación.
  • Los modificadores se colocan después de caracteres regulares, metacaracteres o sus grupos y amplían las posibilidades de uso de plantillas:
    • ? — el símbolo se repite 0 o 1 veces,
    • * — Repetido de 0 a 65536 veces,
    • + — Se repite de 1 a 65536 veces.
  • Las banderas definen opciones adicionales para esta regla y se enumeran en corchetes separado por comas:
    • NC - (nocase) desactiva la verificación de casos.
    • R - (redireccionamiento) detiene el proceso de conversión y devuelve el resultado al navegador del cliente como un redireccionamiento a esta página(302, MOVIDO TEMPORAL). Con este indicador puede especificar un código de resultado diferente, por ejemplo, R=301 devolverá una redirección con el código 301 (MODADO PERMANENTEMENTE). Como comprenderá, esto es exactamente lo que necesitamos.
    • L - (último) detiene el proceso de conversión y el enlace actual se considera final.

El caso más popular es una redirección 301 desde index.php (html) a la página principal. En el 90% de los sitios existe el problema de duplicar la página principal en las direcciones http://site.ru y http://site.ru/index.php (o index.html, index.htm o cualquier otra opción). , da igual, o incluso todos a la vez). En algún lugar esto es obvio, cuando, por ejemplo, un enlace del logotipo conduce a site.ru, y un enlace en el menú conduce a site.ru/index.php, en algún lugar no es obvio, cuando se encuentra un duplicado al ingresar la dirección de index.php manualmente. Es importante resolver simplemente el problema. Y ofrezco una opción universal, aquí está:

RewriteCond %(THE_REQUEST) ^(3 ,9 )\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php|html|htm)$ $1

RewriteCond %(THE_REQUEST) ^(3,9)\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php|html|htm)$ $1

Simplemente pegue este código sin cambios después de la línea después de la línea "RewriteEngine On" y ¡no hay problema!

Muchos de los que comienzan a tener problemas con los duplicados en el sitio se preguntan de dónde provienen los enlaces que duplican la página principal http://site.ru/page-name.html&post=-1234567_8901. ¿De dónde viene el prefijo &post=-1234567_8901? Este "bueno" se toma de VKontakte, cuando alguien comparte un enlace a su sitio en su muro, en un grupo o en público, se agrega automáticamente una línea similar, aparentemente para rastrear algunas estadísticas. .

Para deshacerse de esta tontería de una vez por todas, debe agregar a htaccess:

RewriteCond %(REQUEST_URI) ^(.*)\&sa= RewriteRule ^(.*)\&sa=(.*)$ $1

Como puedes ver, no hay diferencia entre este y el caso anterior, incluso si tienes &post= o &sa= o lo que sea en la url, la solución es la misma, sólo necesitas reemplazar las partes obvias del código. claro, ¿verdad?

Deshacerse de parámetros o etiquetas en la dirección

La pregunta se hizo en los comentarios y muchas veces en el foro, por lo que no se puede ignorar. Qué hacer con esos duplicados: http://site.ru/?abrakadabra o un caso más real http://site.ru?utm_source=twitterfeed&utm_medium=twitter

Este caso es ligeramente diferente del siguiente punto, donde nos desharemos de los parámetros del script PHP, ya que aquí no pasamos la dirección y los parámetros habituales al script. Aquí está la solución:

RewriteCond %(QUERY_STRING) ^lang=ru$ RewriteRule ^(.*)\.php\?(.*)$ $1\.php

%(QUERY_STRING) es una cadena con un conjunto de variables para PHP, la parte de la URL después del signo de interrogación (y antes del hash de anclaje, si lo hay).

URL de llamada: http://site.ru/index.php?lang=ru

RewriteCond %(QUERY_STRING) ^lang=ru $
La URL solicitada se rige por esta regla; no hay otras reglas, por lo que RewriteRule se ejecutará en la línea siguiente.
Reescribir regla ^(.*) \.php\?(.*) $ $1 \.php

URL de origen: http://site.ru/index .php?lang=ru
Plantilla de análisis de URL: ^(.*) \.php\?(.*) $
La URL se analizará en variables: $1 = http://site.ru/index, $2 = lang=ru y se ensamblará nuevamente en el formato http://site.ru/index .php ($1 \.php)
Y luego habrá una redirección 301 a la nueva URL.

Ejemplo de reglas al cambiar la estructura del sitio.

RewriteRule ^publicación/categoría/(.*)$ blog/categoría/$1 RewriteRule ^publicación/(.*)$ blog/publicación/$1

RewriteRule ^publicación/categoría/(.*)$ blog/categoría/$1 RewriteRule ^publicación/(.*)$ blog/publicación/$1

Estas son las líneas que tuve que agregar al archivo htaccess cuando cambié la estructura de mi blog.

Anteriormente, tenía las siguientes direcciones: https://site/post/4358 y https://site/post/category/seo, lo que de alguna manera rompía la lógica en la estructura; después de todo, el blog es solo una parte del sitio. , pero por alguna razón las publicaciones pertenecen al sitio, no al blog, y las categorías pertenecen a las publicaciones, lo cual también es completamente ilógico..info/blog/category/seo - ahora el blog es una sección separada del sitio, y las publicaciones le pertenecen, y las categorías pertenecen al blog, no a las publicaciones.

Del mismo ejemplo queda claro que es importante seguir la secuencia de reglas. Si intercambiara las líneas, es decir, la línea RewriteRule ^post/(..info/blog/post/category/seo aparecería al frente y no como debería en https://site/blog/category/seo.

Y el último ejemplo es el análisis de un error común con la dirección de la raíz del servidor.

Por ejemplo, decidió solucionar un problema cuando la página de categorías está disponible en dos direcciones http://site.ru/razdel/podrazdel/index.php y http://site.ru/razdel/podrazdel/. La segunda URL es correcta y la principal, y la URL con index.php al final es un duplicado completo que debe eliminarse.

Para redirigir desde index.php a una categoría, escribe la siguiente regla:

RewriteEngine en RewriteBase /

Redirección 301 de una página a otra a una nueva dirección

El caso más sencillo es cuando necesitas redirigir una página a otra dirección. Si necesita realizar una redirección para varias páginas, deberá escribir varias reglas, pero en este caso es mejor utilizar las plantillas descritas anteriormente. Hay varias opciones de sintaxis completamente idénticas:

Redirección 301 /nombre-página1.html http://site.ru/nombre-página2.html Redirección permanente /nombre-página1.html http://site.ru/nombre-página2.html Redireccionamiento permanente /nombre-página1.html http http://site.ru/page-name2.html

Redirección 301 /nombre-página1.html http://site.ru/nombre-página2.html Redirección permanente /nombre-página1.html http://site.ru/nombre-página2.html Redireccionamiento permanente /nombre-página1.html http http://site.ru/page-name2.html

Elija uno de los tres, pero personalmente prefiero la primera opción: es más corta, más sencilla y más comprensible. Por cierto, aquí site.ru puede no ser necesariamente el mismo dominio, sino cualquier otro.

Terminemos con .htaccess y pasemos a PHP.

Redirección permanente 301 usando PHP

Normalmente uso el redireccionamiento PHP cuando tengo dificultades con .htaccess o resulta que la función PHP resulta más lógica y comprensible.

La sintaxis de una redirección 301 en PHP se ve así:

encabezamiento(); encabezado("Ubicación: http://site.ru"); morir("Redirigir");

header("HTTP/1.1 301 movido permanentemente"); encabezado("Ubicación: http://site.ru"); morir("Redirigir");

Estas líneas le dicen al navegador del cliente que es necesario redirigir permanentemente desde alguna página solicitada a la dirección http://site.ru. En este caso, http://site.ru puede ser no solo la dirección de la página principal del sitio actual, sino también cualquier otro sitio. Si algo salió mal y se produjo un error, en la ventana del navegador veremos la inscripción "Redireccionar".

Para que quede más claro, aquí hay algunos ejemplos de funciones que escribí para mi blog, tratando de resolver ciertos problemas.

Una función que te permite eliminar una determinada parte de la URL.

if (strpos($_SERVER["REQUEST_URI" ], "http://sitio") !== false) ( $real_page_url = "http://sitio" .str_replace ("/http://sitio", "" , $_SERVER["REQUEST_URI" ]); encabezado ("HTTP/1.1 301 movido permanentemente" ); encabezado ("Ubicación: $real_page_url" ); die("Redireccionar" ); )

if (strpos($_SERVER["REQUEST_URI"], "http://sitio") !== false) ( $real_page_url = "http://sitio"..1 301 movido permanentemente"); header("Ubicación: $real_page_url"); morir("Redireccionar"); )

Una vez tuve el problema de que aparecían un montón de errores 404 en el panel para webmasters, las direcciones de estas páginas eran como https://alaev..e. En algún lugar de la dirección apareció una dirección de sitio duplicada. Y luego escribí una función que verifica si el URI (nota, no la URL, sino el URI) contiene la entrada "http://sitio", y si la contiene, cortamos esta parte de la dirección y escribimos el resultado. a la variable $real_page_url, y luego hacemos una redirección 301 a la dirección correcta desde la variable.

Función que elimina la barra diagonal final de la URL

if (($_SERVER["REQUEST_URI" ], - 1, 1 ) == "/" ) ( $requested_url = rtrim($requested_url, "/" ); encabezado ("HTTP/1.0 301 movido permanentemente" ); encabezado ( "Ubicación: $requested_url" ); die("Redireccionar" ); )

if (($_SERVER["REQUEST_URI"], - 1, 1) == "/") ( $requested_url = rtrim($requested_url, "/"); encabezado("HTTP/1.0 301 movido permanentemente"); encabezado( "Ubicación: $requested_url"); die("Redirigir"); )

Aquí está la función más simple que busca ver si la dirección solicitada de la página tiene una barra al final, y si hay una, la barra se corta y se produce una redirección 301 a la dirección sin la barra.

Hay muchas más opciones que le permiten emitir un comando de redirección en diferentes lenguajes de programación, como ASP, Ruby on Rail, etc., pero no estoy familiarizado con estos lenguajes, así que no seré inteligente ni los engañaré aquí. . Los redireccionamientos también son posibles utilizando la etiqueta meta de actualización, así como los redireccionamientos a JavaScript, pero este es el destino de los desarrolladores de puertas deshonestos y los motores de búsqueda no comprenden estos redireccionamientos; reciben una respuesta de 200 OK del servidor. Por eso no estamos considerando estas opciones.

Redireccionamiento permanente 301 para servidor nginx

¿Recuerda que escribí sobre un espejo de mi sitio, accesible a través de IP? Como resultado, el problema se resolvió mediante una redirección escrita en el archivo de configuración del servidor, generalmente ubicado aquí /etc/nginx/nginx.conf. Allí estaban escritas las siguientes líneas:

servidor ( escucha 1.2.34.123:80 predeterminado; nombre_servidor _; reescribe ^/(.*)$ http://site.ru/$1 permanente; )

servidor ( escucha 1.2.34.123:80 predeterminado; nombre_servidor _; reescribe ^/(.*)$ http://site.ru/$1 permanente; )

Aquí dice que si se accede a una dirección IP a través del puerto 80, entonces es necesario realizar una redirección permanente a site.ru.

Sin embargo, el soporte técnico no me recomendó hacer esto con las palabras: "Sería más correcto configurar el servidor HTTP de tal manera que simplemente cierre la conexión si se accede a él en una dirección que no está explícitamente especificada en el Configuración del servidor HTTP, esta es la opción más confiable, simple, segura y menos exigente para los recursos del servidor. Después de un tiempo, las páginas a las que ya no se puede acceder probablemente serán eliminadas del índice del motor de búsqueda”.

El siguiente consejo fue este: “Cuando necesite simplemente cerrar la conexión en lugar de redirigir, en lugar de la línea, especifique “rewrite ^/(.*)$ http://site.ru/$1 permanente;” dicha línea "return 444;". Luego ejecute: "invoke-rc.d nginx reload"".

Quizás esto ayude a alguien.

Ejemplos de redirecciones en los casos más comunes

Redirigir para el dominio www.site.ru a site.ru

servidor ( escuchar 80; nombre_servidor site.ru; reescribir ^ http://www.site.ru$request_uri? permanente; )

Redirigir desde http://site.ru/index.php a http://site.ru/

ubicación = /index.php ( if ($request_uri = /index.php) ( reescribir ^ http://$host? permanente;#301 redirección ) fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; incluir fastcgi_params; )

ubicación = /index.php ( if ($request_uri = /index.php) ( reescribir ^ http://$host? permanente;#301 redirección ) fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; incluir fastcgi_params; )

Algo como eso. No soy bueno configurando configuraciones para nginx; siempre me conformo con la configuración de Apache, así que si tienes alguna pregunta sobre nginx, es poco probable que pueda ayudarte...

Cómo comprobar los encabezados HTTP y los estados de respuesta del servidor

En esta sección quería describir varios servicios y complementos para verificar la respuesta del servidor, pero entiendo que esta publicación ya tiene un volumen tan grande que tendré que limitarme solo a enlaces a extensiones para Navegadores Chrome y Firefox.

Complemento HttpFox para Firefox

HttpFox (aquí hay un enlace al complemento) es mi herramienta de seguimiento de encabezados http favorita. HttpFox muestra el progreso de la carga de la página línea por línea, lo que le permite rastrear, por ejemplo, cadenas de redirecciones y, en general, el orden y la velocidad de carga de la página. Si usas Mozilla, definitivamente lo recomiendo.

Extensión de encabezados HTTP para Chrome

Yo mismo no uso la extensión de encabezados HTTP (aquí hay un enlace), pero Internet me recomendó que le prestara atención. Si tiene mejores opciones, publíquelas en los comentarios.

Con esto concluye mi post terriblemente largo y aburrido, amigos.
Gracias por leer hasta el final, espero que te haya resultado realmente útil.

El archivo de configuración .htaccess es una configuración para servidores web Apache. La mayoría de los sitios de alojamiento funcionan a través de este servidor, por lo que todos los sitios tienen este archivo. Los webmasters pueden controlar parcialmente su funcionamiento realizando sus propios cambios. En este artículo veremos directivas y reglas que se pueden cambiar en el funcionamiento del servidor.

El archivo .htaccess más importante se encuentra en la raíz del sitio:

Sus acciones se aplican al directorio actual y a todos los subdirectorios. Aquellos. Los propietarios del sitio tienen la oportunidad de influir sólo en el trabajo de su proyecto sin interferir con el trabajo de todo el servidor. Si falta este archivo, se puede crear usando cualquier bloc de notas. Lo principal es que el nombre del archivo debe ser ".htaccess", sin formatos .txt, .doc, etc.

Las redirecciones 301 se configuran con mayor frecuencia a nivel de servidor a través del archivo .htaccess, lo que acelera enormemente el proceso de cambio a nueva pagina, porque no es necesario cargar una página intermedia. También especifica qué archivo procesa el error 404.

A continuación veremos todas las opciones comunes para redirecciones a través de .htaccess y primero nos familiarizaremos con las opciones y reglas.

Para poder trabajar con redirecciones, debe habilitar el módulo ReWriteEngine. Para hacer esto, necesita escribir dos líneas de código (preferiblemente en la parte superior del archivo .htaccess):

Opciones +SeguirSymLinks RewriteEngine activado

Coloque estas líneas en la parte superior de su archivo .htaccess para poder trabajar con las directivas del módulo mod_write.

Además, los módulos mod_alias deben estar habilitados en el alojamiento (para admitir Redirect, RedirectPermanent y RedirectMatch).

1. Reglas de redireccionamiento, RewriteRule y RewriteCond 1.1. Directiva de redireccionamiento

Sintaxis de redireccionamiento:

Redirigir /desde http://a_dirección_completa

Redirect establece una redirección directa de una página a otra.

El código de redireccionamiento está escrito en estado. Es un parámetro opcional. La mayoría de las veces escriben 301, lo que indica un cambio permanente en la dirección de la página.

Es importante que la página "de" se escriba en un formato sin indicar la dirección completa del sitio, pero sí la URL relativa completa comenzando con una barra diagonal "/" (es decir, desde la raíz del sitio). La página donde va la redirección debe estar escrita en su totalidad, es decir dirección de página URL absoluta (es decir, con el nombre de dominio y el protocolo http o https).

Por ejemplo

Redirección 301 /oldpage.php http://sitio/newpage.php

También puedes escribirlo de otra manera.

RedirectPermanent 301 /oldpage.php http://site/newpage.php o Redirect permanente 301 /oldpage.php http://site/newpage.php 1.2. Directiva RewriteRule

La directiva RewriteRule establece las reglas de transición. La sintaxis es la siguiente:

Sustitución de patrón RewriteRule [códigos]
  • Cuando se produce una redirección externa, la URL en la línea del navegador cambia - " "
  • Con interno - no cambia la URL en la línea del navegador - " " o "[L] "
1.3. Directiva RewriteCond

La directiva RewriteCond define las condiciones bajo las cuales se ejecutan las reglas en RewriteRule.

RewriteCond Comparación_Condición de cadena

Por ejemplo, estos términos podrían ser el navegador del usuario, la dirección IP, el título, etc.

1.4. Directiva RedirectMatch

La directiva RedirectMatch es similar a Redirect, la única diferencia es que le permite escribir expresiones regulares.

RedirectMatch From Where To 2. Ejemplos de redirecciones 301 en .htaccess

Ya hemos visto muchos ejemplos con una redirección .htaccess en los artículos:

  • Cambiar la dirección del sitio web: redirigir del dominio antiguo al nuevo

Aquí agregaremos opciones para redireccionamientos que aún no existían.

2.1. Redirigir de una página a otra

Redirigir desde site.ru/cat/oldpage a site.ru/newpage.html

RewriteRule ^cat/oldpage.* /newpage.html

O la segunda opción:

Redirección 301 /cat/oldpage http://www.site.com/newpage.php 2.2. Redirigir desde todos los archivos .htm a .html RewriteCond %(REQUEST_FILENAME) !-f RewriteRule ^(.*)\.htm$ $1.html

O la segunda opción:

Reescribir regla ^(.*)\.htm$ $1.html 2.3. Redirigir todo el directorio a otra página

Cualquier página en el directorio y subdirectorios /old/ será redirigida a /new.php

RewriteRule ^old(.*)$ /new.php 2.4. Eliminar barras diagonales adicionales de una URL

Por ejemplo, la página /catalog///stranica.html es accesible y se abre. Para evitar esta situación y no crear un número infinito de duplicados, debes escribir la siguiente redirección

RewriteCond %(REQUEST_URI) ^(.*)//(.*)$ RewriteRule. %1/%2 2.5. Reescribir sin redireccionar

Puede cargar una página diferente sin cambiar la URL de la página. Por ejemplo, carguemos la página /news.html y la barra de direcciones mostrará la dirección /news/happy

RewriteRule ^noticias/feliz.* /noticias.html [L] 2.6. Agregar una barra diagonal al final de la dirección de la página de inicio

Por ejemplo, muchos servidores funcionan de tal manera que la última barra no está escrita en la URL. Por ejemplo, http://site.ru. El siguiente código resuelve este problema: el sitio se abrirá en http://site.ru/

RewriteCond %(REQUEST_URI) /+[^\.]+$ RewriteRule ^(.+[^/])$ %(REQUEST_URI)/ 2.7. Eliminar el directorio del directorio de la URL

Por ejemplo, para redirigir desde la página site.com/directoriya/stranica.html a site.com/stranica.html debe ingresar lo siguiente:

RewriteRule ^directoriya/(.+)$ http://site.com/$1

O la segunda opción:

RewriteCond %(DOCUMENT_ROOT)/directoriya/$1 -f RewriteRule ^(.*)$ directoriya/$1 2.8. Redirigir parámetros GET

Por ejemplo, redirigir desde la página /?act=page&id=2 a /page-2/

RewriteCond %(QUERY_STRING) act=página RewriteCond %(QUERY_STRING) id=(\d+) RewriteRule .* /page/%1/? ] 2.9. Redirigir a version móvil sitio m.site.ru

En este ejemplo, primero verificamos que el usuario abrió el sitio con dispositivo móvil(HTTP_USER_AGENT), luego la dirección del sitio se reemplaza con m.URL

RewriteCond %(HTTP_HOST) ^(.*)$ RewriteCond %(HTTP_USER_AGENT) (?i:midp|samsung|nokia|j2me|avant|docomo|novarra|palmos|palmsource|opwv|chtml|pda|mmp|blackberry|mib| symbian|inalámbrico|nokia|mano|mobi|teléfono|cdm|upb|audio|SIE|SEC|samsung|HTC|mot-|mitsu|sagem|sony|alcatel|lg|eric|vx|NEC|philips|mmm|xx |panasonic|sharp|wap|sch|rover|pocket|benq|java|pt|pg|vox|amoi|bird|compal|kg|voda|sany|kdd|dbt|sendo|sgh|gradi|jb|dddi|moto |iphone|android) RewriteRule ^$ http://m.%1 2.10. Redirigir desde un subdominio

Por ejemplo, redireccionemos desde cualquier página del subdominio poddomen.site.ru al dominio principal site.ru.

RewriteCond %(HTTP_HOST) ^poddomen.site.ru$ RewriteRule ^(.*)$ http://site.ru%(REQUEST_URI) 3. Otros ejemplos con htaccess 3.1. Denegar dirección IP y navegador

Prohibiremos que el sitio se abra para un usuario que utilice un navegador IE con dirección IP 172.111.222.55

RewriteCond %(HTTP_USER_AGENT) MSIE RewriteCond %(REMOTE_ADDR) ^172\.111\.222\.55$ RewriteRule ^.*$ - [F] 3.2. Denegar un archivo específico

Desactivemos el archivo enable_file.html para todos:

negar de todos 3.3. Permitir el acceso desde una IP

Se permitirá el acceso únicamente desde una dirección IP 172.111.222.55

denegar orden, permitir denegar de todos permitir desde 172.111.222.55 3.4. Denegar el acceso desde diferentes IP

Denegar el acceso al sitio desde varias direcciones IP 172.112.222.55, 172.113.222.55, 172.114.*.*

ordenar denegar, permitir denegar de todos denegar desde 172.112.222.55 denegar de 172.113.222.55 denegar 172.114.*.* 3.5. Redirigir URL de caracteres grandes a pequeños

Todas las letras mayúsculas de la URL se convertirán a letras minúsculas.

Reescribir regla - Reescribir regla! - RewriteRule ^([^A]*)A(.*)$ $1a$2 RewriteRule ^([^B]*)B(.*)$ $1b$2 RewriteRule ^([^C]*)C(.* )$ $1c$2 RewriteRule ^([^D]*)D(.*)$ $1d$2 RewriteRule ^([^E]*)E(.*)$ $1e$2 RewriteRule ^([^F]*) F(.*)$ $1f$2 RewriteRule ^([^G]*)G(.*)$ $1g$2 RewriteRule ^([^H]*)H(.*)$ $1h$2 RewriteRule ^([^ I]*)I(.*)$ $1i$2 RewriteRule ^([^J]*)J(.*)$ $1j$2 RewriteRule ^([^K]*)K(.*)$ $1k$2 RewriteRule ^([^L]*)L(.*)$ $1l$2 RewriteRule ^([^M]*)M(.*)$ $1m$2 RewriteRule ^([^N]*)N(.*)$ $1n$2 RewriteRule ^([^O]*)O(.*)$ $1o$2 RewriteRule ^([^P]*)P(.*)$ $1p$2 RewriteRule ^([^Q]*)Q( .*)$ $1q$2 RewriteRule ^([^R]*)R(.*)$ $1r$2 RewriteRule ^([^S]*)S(.*)$ $1s$2 RewriteRule ^([^T] *)T(.*)$ $1t$2 RewriteRule ^([^U]*)U(.*)$ $1u$2 RewriteRule ^([^V]*)V(.*)$ $1v$2 RewriteRule ^( [^W]*)W(.*)$ $1w$2 RewriteRule ^([^X]*)X(.*)$ $1x$2 RewriteRule ^([^Y]*)Y(.*)$ $1y $2 RewriteRule ^([^Z]*)Z(.*)$ $1z$2 RewriteRule - [N] RewriteCond %(ENV:HASCAPS) TRUE RewriteRule ^/?(.*) /$1

Suficiente punto importante al configurar el sitio. Una redirección configurada incorrectamente puede dañar enormemente los resultados de búsqueda del sitio. Las situaciones más comunes en las que hay que utilizar el Redireccionamiento Permanente 301:

  • Cambiando la dirección del sitio: compró su dominio y decidió pasar de site.example.com a site.ru
  • Pegado de espejos: si su sitio está disponible en www.site.ru y site.ru, los motores de búsqueda Puede considerar esto como dos sitios diferentes, por lo que primero debe decidir cuál es el espejo principal (con www o sin www) y configurar redireccionamientos al espejo principal.
  • Cuando una página (una o más) cambiaba de dirección, en algún momento quedaba claro que las direcciones http://example.com/index.php?option=com_content&task=view&id=23&Itemid=1 no eran buenas y necesitaban se cambiará a http://example.com/sport/news12, pero es una lástima perder posiciones en el índice del motor de búsqueda (ya que este será un artículo nuevo para ellos).
  • Otra forma de lidiar con páginas duplicadas

Importante: si la página se ha movido temporalmente, utilice 302 Movido temporalmente. En este caso, las páginas no se fusionarán y la página con la redirección siempre podrá restaurarse.

Redirección permanente 301 para apache (.htaccess)

Debes insertar las reglas inmediatamente después de las líneas:

RewriteEngine en RewriteBase / # para truncar la ruta completa, desde la raíz del servidor hasta la raíz del sitio

las reglas mismas se especifican mediante expresiones regulares; recuerde la sintaxis:

  • Metacaracteres, para especificar grupos de caracteres o "etiquetas" en un patrón:
    • ^ - marca de inicio de línea,
    • $ - marca de fin de línea,
    • ! - negación,
    • \ - barra diagonal de escape, le permite considerar el metacarácter que le sigue como un carácter normal,
    • . - punto, denota cualquier carácter, pero solo uno,
    • () - agrupación.
  • Los modificadores se colocan después de caracteres regulares, metacaracteres o sus grupos:
    • ? - el símbolo se repite 0 o 1 veces,
    • * - repetido de 0 a 65536 veces,
    • + - repetido de 1 a 65536 veces.
  • Las banderas definen opciones adicionales para esta regla:
    • NC - (nocase) desactiva la verificación de casos.
    • R - (redireccionamiento) detiene el proceso de conversión y devuelve el resultado al navegador del cliente como un redireccionamiento a esta página (302, MOVIDO TEMPORAL).
      Con este indicador puede especificar un código de resultado diferente, por ejemplo, R=301 devolverá una redirección con el código 301 (MODADO PERMANENTEMENTE). Como comprenderá, esto es exactamente lo que necesitamos.
    • L - (último) detiene el proceso de conversión y el enlace actual se considera final.

Considere las situaciones más comunes:

RewriteCond %(HTTP_HOST) ^www\.(.*) RewriteRule ^(.*)$ http://%1/$1 RewriteCond denota la condición que, si coincide, ejecutará la regla RewriteRule. Redirigir desde index.php (html) a la página principal RewriteCond %(THE_REQUEST) ^(3,9)\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php| html |htm)$ $1 Redireccionamiento al cambiar la estructura del sitio RewriteRule ^post/category/(.*)$ blog/category/$1 RewriteRule ^post/(.*)$ blog/post/$1 Redireccionamiento permanente 301 en PHP

Para informar al navegador que la página que ha solicitado debe ser redirigida a la dirección http://site.ru, ejecute los siguientes comandos:

Encabezado("HTTP/1.1 301 movido permanentemente"); encabezado("Ubicación: http://site.ru"); salida();

Redirección permanente 301 para nginx

Las reglas de redireccionamiento se describen en la sección del servidor.

Redirigir desde www.site.ru al servidor site.ru ( escuchar 80; nombre_servidor www.site.ru; reescribir ^ http://site.ru$request_uri? permanente; )

o regla general para todos los sitios:

Servidor ( nombre_servidor ~^(?! www\.); reescribir ^ http://www.$host$request_uri permanente; )

Redirigir desde site.ru al servidor www.site.ru ( escuchar 80; server_name site.ru; reescribir ^ http://www.site.ru$request_uri? permanente; ) Redirigir desde index.php a la ubicación de la página principal = / index.php ( if ($request_uri = /index.php) ( reescribir ^ http://$host? permanente;#301 redirección ) fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root $ fastcgi_script_name; incluir fastcgi_params; )

Un código de estado HTTP con un estado de 301 Movido permanentemente indica que el documento solicitado se ha movido permanentemente al nuevo URI especificado en el campo Ubicación del encabezado.

¿Para qué sirve?

En primer lugar, al cambiar el nombre de dominio de un sitio, es necesario notificar a los motores de búsqueda sobre el cambio en la dirección del sitio. En segundo lugar, fusionar el nombre del sitio con y sin www. En tercer lugar, transferir rápidamente el Page Rank a un nuevo sitio.

PHP

Método uno

Método dos

perla

Método uno

$cgi = nuevo CGI; imprimir $cgi->redirect("http://www.example.com/");

Método dos

#!/usr/bin/perl -w uso estricto; print "Estado: 301 movido permanentemente\n"; imprimir "Ubicación: http://www.example.com/\n\n"; salida;

ASP.NET

Método uno

privado vacío Page_Load(remitente del objeto, System.EventArgs e) ( Response.Status = "301 movido permanentemente"; Response.AddHeader("Ubicación","http://www.example.com"); )

Método dos (a partir de la versión 4.0)

RedirectPermanent("http://www.example.com");

ASP Ruby on Rails def do_something headers["Status"] = "301 movido permanentemente" redirigir_to "http://www.example.com/" end ColdFusion Java (JSP) Servidor web Apache (.htaccess)

Método uno (mod_alias, Redireccionamiento)

Redirección 301 / http://www.ejemplo.com

Método dos (mod_alias, RedirectPermanent)

RedirectPermanent / http://www.example.com

Método tres (mod_alias, Redireccionamiento permanente)

Redireccionamiento permanente / http://www.example.com

Método cuatro (mod_alias, RedirectMatch)

RedirectMatch 301 ^(.*)$ http://www.example.com/

Método cinco (mod_rewrite)

Opciones +FollowSymLinks RewriteEngine en RewriteBase / RewriteRule ^(.*)$ http://www.example.com/$1




Arriba