2012-04-20 8 views
7

Tenemos un sitio web, desafortunadamente todas las URL tienen el sufijo .html, es una instalación de Magento, Magento le permite cambiar esto en el CMS, pero nuevamente, desafortunadamente todas estas URL con el sufijo .html tener una buena clasificación en Google. Necesitamos redireccionar a no .html.Eliminar .html de las URL con un redireccionamiento

Por lo tanto, tenga en cuenta la situación siguiente, estamos reconstruyendo este sitio desde cero, por lo que tenemos las mismas direcciones URL en el sitio nuevo, pero sin el sufijo .html.

  • Ahora es: www.example.de/cool-shoes.html
  • será: www.example.de/cool-shoes

Así www.example.de/cool-shoes.html no existirá más, y he estado tratando una redirección con el .htaccess sin suerte.

que he probado hasta ahora:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/ 
RewriteRule (.*)index\.html$ /$1 [R=301,L] 

y:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html 

pero no parece funcionar ... alguna idea?

Respuesta

8

Ok por lo que, después de algunas investigaciones, y no lograr esto con una regla de reescritura, la siguiente línea de código trabajaron:

redirectMatch 301 ^(.*)\.html $1 

Esto es muy útil para eliminar cualquier extensión url y evitar enlaces rotos, es de esperar ayuda a alguien en el futuro ...

¡salud!

+0

hola, solo para aclarar mi duda, ¿qué está haciendo esta regla? no se supone que el primer parámetro es la expresión que recibirá de la solicitud y el 2º que le enviará a apache. deberían cambiarse ->^(. *) $ 1.html – alexserver

+0

Esa regla es eliminar el '.html'. La primera parte es lo que corresponde: cualquier url que tenga un '.html'. El '$ 1' es lo que está en el paréntesis de la coincidencia: todo excepto el' .html'. –

+0

Agregaría un '$' para asegurar que '.html' llegue al final de la URL:' redirectMatch 301^(. *) \. Html $ $ 1' –

1

Esto debe hacer el truco:

RewriteEngine On 
RewriteRule ^(\w+)\.html$ /$1 [R=301,L] 
+0

Gracias, pero nada parece cambiar, sé que puedo eliminar el prefijo en el magento CMS, pero adiós al ranking de google ... ¿para qué sirve el "w +"? ¿Debo usar [R = 301, NC] O ALGO? –

+0

Bueno, lo que hace es tomar cualquier solicitud que termine en .html (\ w + coincide con cadenas no nulas de caracteres alfanuméricos) y la redirecciona a la misma dirección pero sin el .html. Supongo que quieres algo más, y la solución de Vikas parece una buena –

+0

Gracias amigo, creo que estás yendo por el camino correcto, la solución de Vikas es buena, pero como expliqué anteriormente, solo para los casos en que existe la URL, en este caso esta URL (.html) se eliminará, y quiero que todos sean redireccionados a la nueva url sin el .html. Estoy editando el .htaccess principal y agregué la línea que sugirió en el lugar correcto, pero no se está redireccionando, tal vez lo estoy haciendo mal agregando esta línea en el archivo .htacess principal de toda la instalación de magento, intentaré hacer un .hácess separado para esta tienda (tengo una instalación multiscopal) ¡Gracias! –

1

Siga el steps, y usted será capaz de eliminar .html desde url sin modificar el archivo .htaccess.

+0

Gracias, eso realmente funciona, solo si sus páginas tenían el sufijo .html antes, pero en este caso, esta página con .html no existe. Sí existe en el sitio antiguo, pero no en el nuevo, por lo que cada vez que alguien va por el viejo ulr (www.mysite.de/thing.html) se lo redirecciona a www.misitio.de/todo, en lugar de 404 No encontró. Creo que esto se puede lograr con htaccess, ¿verdad? –

+0

Una respuesta de solo un enlace no es de alta calidad. El contenido vinculado podría cambiar o dejar de estar disponible. Tampoco es fácil de usar para que las personas hagan clic en la respuesta. Sería mejor al menos resumir los pasos aquí. –

0

Pruebe lo siguiente para poner en su archivo .htaccess redirigida www.mysite.de/cool-shoes.html permanente www.mysite.de/cool-shoes esto puede ser útil para usted

8

Esta voluntad reescribir la url al igual que http://example.com/page.html ->http://example.com/page

# Remove .html from url 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html 
+0

Este código parece agregar un '.html' no eliminar eso. También parece ser una regla de reescritura, no una regla de redirección. Necesitaría '[R = 301, L]' al final para hacer cualquier redirección. –

2

Trate de añadir lo siguiente al archivo .htaccess en el directorio raíz de su sitio redirigir las direcciones URL con extensión .html y retirarla.

Options +FollowSymLinks -MultiViews 
DirectorySlash Off 

RewriteEngine On 

RewriteCond %{SCRIPT_FILENAME}/ -d 
RewriteCond %{SCRIPT_FILENAME}.html !-f 
RewriteRule [^/]$ %{REQUEST_URI}/ [R=301,L] 

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteRule ^(.+)\.html$ /$1 [R=301,L] 

RewriteCond %{SCRIPT_FILENAME}.html -f 
RewriteRule [^/]$ %{REQUEST_URI}.html [QSA,L] 
1

Aquí está la solución que funcionó para mí.

RewriteCond %{THE_REQUEST} \.html [NC] 
    RewriteRule ^(.*)\.html$ /$1 [R=301,L] 

    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME}\.html -f 
    RewriteRule ^(.*)$ $1.html [L] 
+0

Estas reglas parecen apropiadas para cuando su servidor realmente tiene archivos que terminan en '.html' pero no desea que' .html' aparezca en las URL. –

0

Esto es para las direcciones URL que termina con .html /product/raspberrypi.html --->/producto/Raspberry Pi/(/product/raspberrypi/index.php) el index.php está oculto. Me tomó un tiempo resolver esto. LOL ...

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_URI} \.html$ 
RewriteRule ^(.*)\.html$ $1 [R=301,L] 

RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

usted tiene que utilizar 'REQUEST_URI' y añadirlo antes índice de redirigir las reglas, ya que podría ser anulado por la aplicación. Es importante saber que su URI no es un nombre de archivo o directorio que estamos tratando de redirigir, ya que todos los nombres de los archivos tienen index.php en las carpetas raíz (Wordpress).

Cuestiones relacionadas