¿htaccess o redirección para ocultar parte de un enlace?
Tengo un plugin de rotación de anuncios instalado para mostrar varios anuncios en mi sitio, pero el plugin está codificado para usar la ruta completa del directorio en el enlace de seguimiento. Me gustaría saber si hay algo sencillo que pueda poner en mi htaccess para enmascarar el enlace. Por ejemplo:
http://misitio.com/wp-content/plugins/plugin-de-rotacion-de-anuncios/rotate.php?trackerid=1
debería verse como:
http://misitio.com/rotate.php?trackerid=1 (cualquier variación de esto está bien, solo no quiero que se muestre la ruta completa wp-content/plugins/ en el enlace).
He probado algunos plugins pero no obtengo los resultados deseados. Para recapitular, quiero que el enlace MUESTRE como el segundo, pero cuando se haga clic, lleve al primero, y necesito que el trackerid=# mantenga el id generado, solo quiero enmascarar parte del enlace. ¿Hay algo que pueda poner en mi htaccess para hacer esto?
¡Gracias!

Lo que necesitas hacer es configurar una reescritura personalizada. Esto puede cambiar algo como http://site.com/rotate/1
a http://site.com/wp-content/plugins/ad-rotating-plugin/rotate.php?trackerid=1
Aquí tienes un código no probado que podría ayudarte:
<?php
/*
Plugin Name: Tu Plugin
Plugin URI:
Description:
Version: 0.1
Author:
Author URI:
*/
// Añadir regla de reescritura y limpiar en la activación del plugin
register_activation_hook( __FILE__, 'ad_rotate_activate' );
function ad_rotate_activate() {
ad_rotate_rewrite();
flush_rewrite_rules();
}
// Limpiar en la desactivación del plugin
register_deactivation_hook( __FILE__, 'ad_rotate_deactivate' );
function ad_rotate_deactivate() {
flush_rewrite_rules();
}
// Crear nueva regla de reescritura
add_action( 'init', 'ad_rotate_rewrite' );
function ad_rotate_rewrite() {
add_rewrite_rule( 'rotate/([^/]+)','/wp-content/plugins/ad-rotating-plugin/rotate.php?trackerid=$matches[1]','top' );
}
?>

Intenté agregar esto a mi archivo functions.php y no pareció hacer nada. ¿Necesito actualizar mis enlaces permanentes? ¿O esto necesita ser su propio archivo de plugin?

El código que escribí arriba fue escrito como un plugin... no como código para incluir en un archivo functions.php
... ya que estás trabajando con un plugin desde el principio, asumí que querías incluir el código de reescritura en el plugin. Pero al menos necesitas hacer la llamada a add_rewrite_rule()
y luego actualizar tus reglas de reescritura.

@EAMann: ¿Esto agrega la regla al item rewrite_rules
en wp_options
? Miré el código en wp-includes/rewrite.php
y no podría decir definitivamente si lo hace o no. Si se guarda, ¿qué evita que la regla se guarde muchas veces? ¡Las mentes inquisitivas quieren saber!

@Peter add_rewrite_rule()
agrega la regla a un arreglo que está indexado basado en la expresión regular definida arriba (rotate/([^/]+)
). Así que no puede ser agregada múltiples veces. Echa un vistazo al método add_rule()
de la clase WP_Rewrite (/wp-includes/rewrite.php
alrededor de la línea 1797).

@EAMann, gracias por la aclaración. Entonces, ¿esto funcionaría como un plugin separado, o debería poner esto directamente en los archivos del plugin que se están usando? Intenté agregarlo como un plugin independiente y no obtuve ningún cambio en los enlaces originales. Principalmente soy un diseñador front-end así que esto me resulta un poco ajeno. ¡Gracias! :)

No está destinado a cambiar ninguno de los enlaces. Lo que el reescritor de URLs de WordPress hace es mapear solicitudes de una URL a otra. Así que una solicitud a http://site.com/rotate/1
realmente mostrará el contenido de http://site.com/wp-content/plugins/ad-rotating-plugin/rotate.php?trackerid=1
. También necesitas tener los pretty permalinks activados o todo esto es irrelevante.

@EAMann: Entonces el array al que se añade nunca se escribe en la base de datos, ¿correcto?

@EAMann, sí tengo los permalinks bonitos activados, pero lo que necesito que ocurra es que las URLs se reescriban al cargar la página, o que se enmascaren de alguna manera para que cuando se cargue la página, no VEAN el enlace largo, sino que de hecho vean el enlace corto. Lamento si no fui claro.

@eamann Quiero algo similar a esto. La solicitud se redirige a rotate.php pero encuentro $_GET['tracker']=$matches[1]
en lugar de $_GET['tracker']=1
. ¿Te has encontrado con este problema? ¿Alguna sugerencia?
