Ayuda con rewriterules

Pues recurro a EOL porque me veo en la tesitura de tener que currarme unas redirecciones en el htaccess y con las 301 no me vale, tengo que recurrir a Rewriterule y no tengo ni zorra idea, así que pongo este post aquí en la esperanza de que alguien pueda echarme una mano.

Cuento mi caso:
Tenía un foro VBulletin en la raiz del dominio (http://www.midominio.com). Tiene ya bastantes años el foro y mucha actividad, así que ha conseguido bastante autoridad en Google que, por supuesto, no quiero perder. ¿Por qué habría de perderla? Pues porque necesito mover el foro a una carpeta (http://www.midominio.com/foro), ya que estoy remodelando toda la web y en la raíz va a ir ahora un portal en wordpress.

Bueno, hasta ahí mi problema. Ahora la solución. Me han dicho que lo mejor para redirigir las direcciones que llevan ya años indexadas en Google hasta las páginas movidas a la carpeta /foro lo mejor es tirar de rewrite rules. Para ello tengo que buscar algún parámetro común a todos los links que permita redirigir esos y solo esos.

Bien, los foros en Vbulletin tienen todos una dirección de este tipo:

http://www.midominio.com/forumdisplay.php?númeroID-nombre-del-subforo


Es decir, todas las direcciones de los foros comienzan por
http://www.midominio.com/forumdisplay.php?
hasta ahí es común a todos y luego ya va el ID del foro y el nombre que yo le haya dado.

Así mismo, todos los hilos tienen esta dirección:
http://www.midominio.com/showthread.php?númeroID-Título-del-hilo

y las siguientes páginas de respuestas a ese hilo:
http://www.midominio.com/showthread.php?númeroID-Título-del-hilo/page2 (page3, page4, etc.)


Es decir, necesito que todas las páginas indexadas por Google cuyas direcciones comiencen por
http://www.midominio.com/forumdisplay.php?
y
http://www.midominio.com/showthread.php?
sean redirigidas a esas mismas URLs pero dentro de la carpeta /foro

Y si alguien me pudiera dar el código que tengo que poner para ello en el .htaccess me salvará la vida, que yo valoro en una cerveza fresca si alguna vez nos topamos en la calle XD
Quizas no te seria más facil instalar wordpress en una subcarpeta y poner una regla de que cuando se visite la raiz, redirigirlo a wordpress? que supongo que es tu objetivo, que la página de wordpress se vea primero.

Edit: Aunque pensandolo mejor, podría ser un problema a la hora de visitar el foro, ya que habría que para visitar su raiz siempre deberia llevar algo adicional, o sino redirecciona a wordpress.

PD: por curiosidad, el RedirectMatch no le gusta a google?
RedirectMatch ^/forumdisplay\.php$ /foro/forumdisplay.php
RedirectMatch ^/showthread\.php$ /foro/showthread.php


Con RewriteRule es practicamente identico
RewriteEngine on
RewriteRule ^forumdisplay\.php$ foro/forumdisplay.php
RewriteRule ^showthread\.php$ foro/showthread.php
WaterDark escribió:Quizas no te seria más facil instalar wordpress en una subcarpeta y poner una regla de que cuando se visite la raiz, redirigirlo a wordpress? que supongo que es tu objetivo, que la página de wordpress se vea primero.

Edit: Aunque pensandolo mejor, podría ser un problema a la hora de visitar el foro, ya que habría que para visitar su raiz siempre deberia llevar algo adicional, o sino redirecciona a wordpress.


Fue lo primero que se me ocurrió, porque es lo más simple, pero casi tan rápido como me vino a la cabeza caí en la cuenta de la enorme cantidad de cosas que podían fallar y los problemas de todo tipo que me iba a generar. Y es que no deja de ser una chapuza.

WaterDark escribió:
PD: por curiosidad, el RedirectMatch no le gusta a google?
RedirectMatch ^/forumdisplay\.php$ /foro/forumdisplay.php$1
RedirectMatch ^/showthread\.php$ /foro/showthread.php$1


Con RewriteRule es practicamente identico
RewriteEngine on
RewriteRule ^forumdisplay\.php$ foro/forumdisplay.php$1
RewriteRule ^showthread\.php$ foro/showthread.php$1


Pues la verdad es que el redirectmatch ni lo había barajado. ¿Le ves alguna ventaja respecto a rewriterule?
Por otro lado creo que hay alguna expresión regular para indicarle a Google que el cambio es permanente, ¿no? Es que en un futuro me gustaría prescindir de las redirecciones, porque siempre añaden carga al servidor, aunque no sea mucha.

Muchas gracias por los códigos, mañana hago un test y comento cómo ha ido la cosa.
Redirectmatch redirige al cliente a la nueva URL, con lo que con el tiempo pues la mayoria usara esta.
Rewriterule es una redireccion interna del servidor, el cliente sigue accediendo con la URL vieja, con lo que la migración hacia la nueva URL será más lenta.

Voy a probar a ver si el Redirectmatch soporta ponerle "permanent" como parametro.

Edit: si lo soporta, solo pon "permanent" o "301" justo despues de RedirectMatch
RedirectMatch permanent ^/forumdisplay\.php$ /foro/forumdisplay.php
RedirectMatch permanent ^/showthread\.php$ /foro/showthread.php


Y la verdad es que Redirect a pelo tambien te sirve, que debe consumir menos que RedirectMatch
Redirect permanent /forumdisplay.php /foro/forumdisplay.php
Redirect permanent /showthread.php /foro/showthread.php


Creia que quizas estas no te valian por lo que has mencionado al principio de que el "301" no te vale.

PD: y el "$1" sobra en todos, creia que era necesario para que pasará los parametros "?..."
Por alguna razón que desconozco, me da error con RedirectMatch, pero con RewriteRule funciona perfectamente, así que con eso me apañaré.

Muchas gracias por el cable, socio, me ha sido muy útil tu ayuda y a Google ya le molo como antes :p
4 respuestas