Usa htaccess para corregir las URL mal escritas

Así que tengo un problema bastante simple (al menos creo que sí) con mi sitio web. Necesito poder redirigir cualquier URL mal escrita a las correctas. Es más fácil si les explico a ustedes que a describirlos.

Por ejemplo, tomemos esta url.

http://www.tomshardware.com/reviews/radeon-r9-290x-hawaii-review,3650.html

Ahora, esa url lo llevará a la página correcta de ese artículo, independientemente de cómo se escriba la url. Digamos que accidentalmente coloca una letra, un número o una palabra en esa URL para algo como esto:

http://www.tomshardware.com/reviews/radeon-r9-290x-TEST-TEST-hawaii-review,3650.html

Esa URL aún lo llevará al artículo correcto y se corregirá a sí mismo a la URL correcta. Podría agregar cualquier cosa a esa URL y aún lo llevará al artículo correcto, independientemente de lo que escriba accidentalmente en él.

Entonces mi pregunta es ¿cómo hago esto en htaccess? Este es mi archivo htaccess actual

# Secure htaccess file  order allow,deny deny from all  AddHandler application/x-httpd-php5 .html .htm AddType application/x-httpd-php .html .htm .php AddHandler cgi-script .pl .cgi Options ALL -Indexes -Multiviews +ExecCGI +FollowSymLinks # Do not remove this line, otherwise mod_rewrite rules will stop working RewriteBase / RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.html -f RewriteRule ^(.*)$ $1.html #Redirect Non-WWW to WWW RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] RewriteCond %{REQUEST_URI} /index\.html?$ [NC] RewriteRule ^(.*)index\.html?$ "/$1" [NC,R=301,NE,L] 

Probablemente no puedas hacer eso de esa manera.

Como puede observar, el texto en la url es totalmente irrelevante y solo está ahí para crear urls legibles y fáciles de indexar (SEO). Esas palabras se llaman “babosas”, consulte http://en.wikipedia.org/wiki/Clean_URL#Slug. Si modifica la última parte, el 3650 romperá la URL porque este es el único identificador que normalmente corresponde a un único Identificación en la base de datos.

Supuesto sobre cómo y por qué el sitio mencionado hace esto: el sitio utiliza un componente de enrutamiento independiente (por ejemplo, Enrutamiento desde el marco PHP de Symfony: http://symfony.com/components/Routing ), un marco web completo o todo está escrito a mano . Dependiendo del idioma, puede ser ZEND, Symfony, etc. para PHP, MVC para Asp.net o cualquier otro.

En todos los casos, hay algún tipo de filtrado de URL antes de que se sirva el contenido original. El enrutamiento analiza la url, recupera la ID única, recupera el conjunto de datos y crea de nuevo una URL absoluta. Luego compara la ruta recién generada con la que ha ingresado. Si no coinciden, el marco emite un estado http de 30x y lo redirige a la nueva URL. El propósito de esto es mantener la cordura de los enlaces cuando las tags de slug han cambiado o por alguna razón, el diseño de la URL amigable con SEO ha cambiado. La redirección está allí, de modo que las direcciones URL antiguas se actualizan la próxima vez que un motor de búsqueda visite la página y actualice su índice. Imagina que tienes un error tipográfico en algún lugar de las babosas o te olvidaste de mencionar a Radeon y quieres evitar que se rompa para siempre o que esté mal en la base de datos. Por lo tanto, debe corregirlo, pero al mismo tiempo desea evitar romper las URL anteriores para los índices de búsqueda que aún no han vuelto a visitar su sitio con las nuevas babosas o los usuarios que lo han marcado.

Después de la redirección, vuelve a comparar las URL y una vez que coinciden, se sirve el contenido.

Una búsqueda de base de datos es muy probable aquí y no puede hacer esto correctamente con htaccess solo ya que no tiene conocimiento acerca de la corrección de la url aquí.

Redirigiría internamente todas las páginas de artículos a un progtwig php y coincidirá con los parámetros con la mejor página posible para mostrar

 -- .htaccess -- RewriteEngine on RewriteRule ^article/(.*).html$ /article.php?url=$1 [L] -- php -- read article selection criteria $article_url=$_GET['url']; Search through database or files and show the article