{"id":788,"date":"2026-02-24T08:55:29","date_gmt":"2026-02-24T08:55:29","guid":{"rendered":"https:\/\/vera.fabricomiweb.com\/?p=788"},"modified":"2026-02-24T08:55:29","modified_gmt":"2026-02-24T08:55:29","slug":"sistema-de-redireccion-completo","status":"publish","type":"post","link":"https:\/\/vera.fabricomiweb.com\/index.php\/2026\/02\/24\/sistema-de-redireccion-completo\/","title":{"rendered":"Sistema de Redirecci\u00f3n Completo"},"content":{"rendered":"<p class=\"wp-block-site-tagline\">Sistema para redirigir la aplicaci\u00f3n de pedidos de ingeleco, distribuido en dos aplicaciones.<\/p>\n\n\n<h2 id=\"1-contenido-del-redireccionador\">1. Contenido del redireccionador.<\/h2><br>\n<p><a href=\"ipLogger\/\"><strong>1. IP Logger:<\/strong><\/a> Aplicaci\u00f3n dise\u00f1ada para instalarse en el servidor cuya IP se ha de registrar.<\/p>\n<p><a href=\"redirigiringeleco\/\"><strong>2. redirigirIngeleco:<\/strong> <\/a> Aplicaci\u00f3n pensada para instalarse en el directorio fabricomiweb.com\/redirigirIngeleco\/ del servidor Linux.<\/p><br>\n<h2 id=\"2-funcionamiento\">2. Funcionamiento<\/h2><br>\n<p>Este sistema de <strong>registro y redirecci\u00f3n<\/strong> se ha construido siguiendo el siguiente diagrama:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/vera.fabricomiweb.com\/wp-content\/uploads\/2016\/07\/Redireccionador-separado-diagrama-propio-Diagrama-Sistema.drawio.png\" alt=\"Diagrama\"><\/p><br>\n<h3 id=\"21-ip-logger\">2.1. IP Logger<\/h3><br>\n<p> El archivo index.php ejecuta una serie de instrucci\u00f3nes, en el siguiente orden:<\/p>\n<ol>\n<li><p>Conecta con la base de datos.<\/p>\n<\/li>\n<li><p>Solicita su IP p\u00fablica a un servicio externo, localizado en <a href=\"https:\/\/vera.fabricomiweb.com\/ip-redirect\/ip-json.php\">https:\/\/vera.fabricomiweb.com\/ip-redirect\/ip-json.php<\/a>.<\/p>\n<\/li>\n<li><p>Consulta la direcci\u00f3n IP registrada en la base de datos con <strong>ID = 1<\/strong>.<\/p>\n<\/li>\n<li><p>Si en la base de datos <strong>no existe un registro con esta ID<\/strong>, registra la direcci\u00f3n IP.<\/p>\n<\/li>\n<li><p>Si el registro con ID = 1 <strong>coincide exactamente<\/strong> con la direcci\u00f3n IP actual, <strong>el programa finaliza la ejecuci\u00f3n<\/strong>.<\/p>\n<\/li>\n<li><p>Si el registro con ID = 1 <strong>no coincide con la direcci\u00f3n IP actual<\/strong>, <strong>Modifica<\/strong> el registro con <strong>ID = 1<\/strong> con el valor de la direcci\u00f3n IP actual.<\/p>\n<\/li>\n<li><p>Cierra la conexi\u00f3n y termina la ejecuci\u00f3n.<\/p>\n<\/li>\n<\/ol>\n<h3 id=\"22-redirigir-ingeleco\">2.2. Redirigir Ingeleco.<\/h3><br>\n<p>El archivo index.php ejecuta las siguientes instrucciones:<\/p>\n<ol>\n<li><p>Consulta en la Base de datos la <strong>direcci\u00f3n IP registrada cuyo ID = 1<\/strong>.<\/p>\n<\/li>\n<li><p><strong>Redirecciona<\/strong> a una direcci\u00f3n con la siguiente estructura:<\/p>\n<ul>\n<li>https:\/\/{direccion-ip}\/pedidos\/<\/li>\n<\/ul>\n<\/li>\n<\/ol><br>\n<h2 id=\"3-instalaci\u00f3n\">3. Instalaci\u00f3n.<\/h2><br>\n<h3 id=\"31-ip-logger\">3.1. IP Logger.<\/h3><br>\n<p>Una vez alojados los archivos en el <strong>Servidor Windows<\/strong> se ha de <strong>programar una tarea<\/strong> para que el servidor ejecute el archivo index.php cada minuto:<\/p>\n<ul>\n<li>En <strong>Herramientas<\/strong>, Seleccionar la opci\u00f3n <strong>Programador de Tareas<\/strong>.<\/li>\n<li>En <strong>Configuraci\u00f3n avanzada<\/strong> Se podr\u00e1 seleccionar que la tarea se ejecute indefinidamente. El intervalo m\u00ednimo de ejecuci\u00f3n que permite <strong>Windows Server 2016 Stardad Evaluation<\/strong> es de <strong>5 minutos<\/strong>. En otras versiones, <strong>el intervalo m\u00ednimo entre ejecuciones se puede reducir hasta 1 minuto<\/strong>.<\/li>\n<li>En <strong>Acci\u00f3n<\/strong> Seleccionar la opci\u00f3n <strong>Iniciar un programa<\/strong>.<\/li>\n<li>En <strong>Programa o script<\/strong>, seleccionar <em>index.php<\/em> dentro del directorio ipLogger.<\/li>\n<\/ul>\n<p>Si es necesario ejecutar la tarea con un intervalo menor, se tendr\u00e1 que <strong>modificar el archivo index.php<\/strong> con la siguiente estructura:<\/p>\n<pre><code class=\"language-php\">while (true){\n    insertarDatos();\n    sleep(20)\n}\n<\/code><\/pre>\n<p>siendo la funci\u00f3n <strong>sleep(20)<\/strong> la que determinar\u00e1 cada cu\u00e1ntos segundos se ejecuta la aplicaci\u00f3n.<\/p>\n<p>Para ejecutarla, se deber\u00e1 hacer a trav\u00e9s de la terminal:<\/p>\n<pre><code class=\"language-text\">php index.php\n<\/code><\/pre>\n<h3 id=\"32-redirigiringeleco\">3.2. redirigirIngeleco.<\/h3><br>\n<p>En el fabricomiweb.com, subir el directorio <em><strong>redirigirIngeleco<\/strong><\/em>. Al buscar la direcci\u00f3n <a href=\"https:\/\/fabricomiweb.com\/redirigirIngeleco\/\"><em><strong>https:\/\/fabricomiweb.com\/redirigirIngeleco\/<\/strong><\/em><\/a> el navegador redireccionar\u00e1 a la aplicaci\u00f3n de pedidos de Ingeleco.<\/p>\n\n<\/body>\n<\/html>\n\n\n\n<h2 class=\"wp-block-heading\">4. C\u00f3digo.<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">IP Logger:<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Conexion.php<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\n\/\/print_r(PDO::getAvailableDrivers()); \/\/comprobar que el driver de firebird est\u00e1 instalado correctamente.\nfunction conectarBaseDatos() {\ntry {\n    $host = 'vera.fabricomiweb.com';\n    $puerto = 'placeholder';\n    $dbnombre= 'placeholder';\n    $usuario = 'placeholder';\n    $pass = 'placeholder';\n\n    \/\/la url quedar\u00eda as\u00ed\n    $url = \"mysql:host=$host;port=$puerto;dbname=$dbnombre;charset=utf8mb4\";\n\n    \/\/Creamos el objeto PDO:\n    $conexion = new PDO($url, $usuario, $pass, &#91;\n        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION\n    ]);\n    \/\/echo \"conexi\u00f3n realizada con \u00e9xito\";\n} catch (\\Throwable $th) {\n    echo \"Error en la conexi\u00f3n: \" . $th->getMessage();\n}\n\nreturn $conexion;\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">retornar-ip.php<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\/**\n * Consulta la IP p\u00fablica del servidor y la devuelve como string.\n *\/\nfunction obtenerIpPublicaServidor(): ?string {\n    $ip = @file_get_contents('https:\/\/vera.fabricomiweb.com\/ip-redirect\/ip-json.php');\n    $response = json_decode($ip, true);\n    if (isset($response&#91;'ip'])) {\n\n        return $response&#91;'ip'];\n    }\n    return null;\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">select-ip.php<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php require_once 'retornar-ip.php'; require_once 'conexion.php';\n\n\n\/** Realiza una consulta a la base de datos para obtener la IP registrada con ID = 1 *\/\nfunction obtenerIpRegistrada() {\n    $conexion = conectarBaseDatos();\n    try {\n        $sql = \"SELECT IP_INGELECO FROM INGELECO_IP_LOG WHERE ID = 1\";\n        $stmt = $conexion->prepare($sql);\n        $stmt->execute();\n        $resultado = $stmt->fetch(PDO::FETCH_ASSOC);\n        return $resultado ? $resultado&#91;'IP_INGELECO'] : null;\n    } catch (\\Throwable $th) {\n        echo \"Error al obtener la \u00faltima IP registrada: \" . $th->getMessage() . \"\\n\";\n        return null;\n    }\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">insert-ip.php<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php require_once 'conexion.php'; require_once 'retornar-ip.php'; require_once 'select-ip.php';\n \n function insertarDatos(){\n    $conexion = conectarBaseDatos();\n    $ipPublica = obtenerIpPublicaServidor();\n    $ultimoRegistro = obtenerIpRegistrada();\n\n    if(isset($ipPublica) &amp;&amp; $ultimoRegistro != null){\n        if ($ipPublica != $ultimoRegistro) {\n            try {\n            $sql = \"UPDATE INGELECO_IP_LOG SET IP_INGELECO = :ipPublica WHERE ID = 1\";\n            $stmt = $conexion->prepare($sql);\n            $stmt->bindParam(':ipPublica', $ipPublica, PDO::PARAM_STR);\n            if ($stmt->execute()) {\n                echo \"IP actualizada correctamente \\n\" . $ipPublica;\n            }\n        } catch (\\Throwable $th) {\n            echo \"\\nError: \" . $th;\n        }\n        } else {\n            echo \"La IP es id\u00e9ntica y no se ha agregado \\n\";\n        }\n    } else {\n        try {\n        $sql = \"INSERT INTO INGELECO_IP_LOG (IP_INGELECO) VALUES (:ipPublica)\";\n            $stmt = $conexion->prepare($sql); \n            $stmt->bindParam(':ipPublica', $ipPublica, PDO::PARAM_STR);\n            $stmt->execute();\n            echo \"\\nIP registrada correctamente: \" . $ipPublica . \"\\n\";\n\n        } catch (\\Throwable $th) {\n            echo \"\\nError: \" . $th->getMessage();\n        }\n    }\n    die();\n    }<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php require 'src\/insert-ip.php';\n\ninsertarDatos();<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">redirigirIngeleco:<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">index.php<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php require_once 'conexion.php';\n\nfunction obtenerUltimaIpRegistrada() {\n    $conexion = conectarBaseDatos() ;\n    try {\n        $sql = \"SELECT IP_INGELECO FROM INGELECO_IP_LOG WHERE ID = 1\";\n        $stmt = $conexion->prepare($sql);\n        $stmt->execute();\n        $resultado = $stmt->fetch(PDO::FETCH_ASSOC);\n        return $resultado ? $resultado&#91;'IP_INGELECO'] : null;\n    } catch (\\Throwable $th) {\n        echo \"Error al obtener la \u00faltima IP registrada: \" . $th->getMessage() . \"\\n\";\n        return null;\n    }\n}\n\n\/\/* Redirige a la web de Ingeleco Usando la siguiente estructura de URL: https:\/\/IP\/pedidos\/ *\/\nfunction redireccionarWeb() {\n    $ipPublica = obtenerUltimaIpRegistrada();\n    $url = \"https:\/\/$ipPublica\/pedidos\/\";\n    header(\"Location: $url\");\n    echo \"Redirigiendo a: $url\\n\";\n}\n\nredireccionarWeb();<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">conexion.php<\/h4>\n\n\n\n<p>El c\u00f3digo de el archivo de conexi\u00f3n es id\u00e9ntico a su hom\u00f3nimo de ipLogger<\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. Contenido del redireccionador. 1. IP Logger: Aplicaci\u00f3n dise\u00f1ada para instalarse en el servidor cuya IP se ha de registrar. 2. redirigirIngeleco: Aplicaci\u00f3n pensada para instalarse en el directorio fabricomiweb.com\/redirigirIngeleco\/ del servidor Linux. 2. Funcionamiento Este sistema de registro y redirecci\u00f3n se ha construido siguiendo el siguiente diagrama: 2.1. IP Logger El archivo index.php ejecuta [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"","ocean_second_sidebar":"","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"","ocean_custom_header_template":"","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"","ocean_menu_typo_font_family":"","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"","omw_enable_modal_window":"enable","ocean_post_oembed":"","ocean_post_self_hosted_media":"","ocean_post_video_embed":"","ocean_link_format":"","ocean_link_format_target":"self","ocean_quote_format":"","ocean_quote_format_link":"post","ocean_gallery_link_images":"on","ocean_gallery_id":[],"footnotes":""},"categories":[1],"tags":[],"class_list":["post-788","post","type-post","status-publish","format-standard","hentry","category-uncategorized","entry"],"_links":{"self":[{"href":"https:\/\/vera.fabricomiweb.com\/index.php\/wp-json\/wp\/v2\/posts\/788","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vera.fabricomiweb.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vera.fabricomiweb.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vera.fabricomiweb.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vera.fabricomiweb.com\/index.php\/wp-json\/wp\/v2\/comments?post=788"}],"version-history":[{"count":2,"href":"https:\/\/vera.fabricomiweb.com\/index.php\/wp-json\/wp\/v2\/posts\/788\/revisions"}],"predecessor-version":[{"id":790,"href":"https:\/\/vera.fabricomiweb.com\/index.php\/wp-json\/wp\/v2\/posts\/788\/revisions\/790"}],"wp:attachment":[{"href":"https:\/\/vera.fabricomiweb.com\/index.php\/wp-json\/wp\/v2\/media?parent=788"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vera.fabricomiweb.com\/index.php\/wp-json\/wp\/v2\/categories?post=788"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vera.fabricomiweb.com\/index.php\/wp-json\/wp\/v2\/tags?post=788"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}