Resolver una URL relativa con una URL base
Convierta un enlace, una ruta, una consulta, un fragmento o una referencia relativa al protocolo en la URL absoluta exacta que utilizaría un navegador.
Ejecutar — gratis
Indique una URL base absoluta y la referencia hallada en un documento, feed, hoja de estilo, manifiesto o respuesta de API. El resolvedor aplica las reglas estándar a segmentos, barras finales, consultas, fragmentos, puertos y cambios de origen, y devuelve una URL normalizada sin solicitar el destino ni inspeccionar contenido remoto. El proceso es rápido y determinista.
Empiece por la URL completa que aporta el contexto
Una referencia relativa solo adquiere significado respecto de otra URL. Introduzca ese contexto en base_url como URL absoluta completa, incluido el esquema y, cuando corresponda, el host. La ruta importa tanto como el dominio. Por ejemplo, una base terminada en <code>/docs/page.html</code> interpreta una referencia sencilla como <code>image.png</code> como elemento hermano de la página, mientras que una base terminada en <code>/docs/</code> la trata como hija de ese directorio. El resolvedor no adivina si una ruta representa un archivo o una carpeta: respeta la sintaxis, en especial la barra final. Acepta las formas absolutas estándar que entiende la implementación URL del navegador. Un valor como <code>/docs/page.html</code> no basta como base porque carece de esquema absoluto y contexto de origen. Las bases inválidas o relativas generan un error de entrada, no una respuesta aparentemente verosímil. Esta exigencia permite descubrir fallos antes de que los enlaces resueltos entren en un rastreador, una importación, una regla de redirección o un conjunto de datos almacenado.
Comprenda cómo cada referencia modifica la base
El campo relative_reference admite mucho más que un nombre de archivo. Una barra inicial sustituye la ruta base y conserva el esquema y la autoridad. Dos barras iniciales forman una referencia de red: permiten cambiar el host y heredan el esquema. Los segmentos como <code>../</code> suben niveles y <code>./</code> permanece en el nivel actual; la normalización elimina esos segmentos de navegación del resultado. Una referencia que empieza por <code>?</code> mantiene la ruta y sustituye la consulta. Si empieza por <code>#</code>, conserva ruta y consulta y cambia el fragmento. Una referencia absoluta reemplaza por completo la base, tal como exige el estándar. Esta capacidad rechaza las referencias vacías para que un campo omitido por accidente no se confunda con una reutilización intencionada de la base. Los caracteres codificados en porcentaje siguen codificados conforme a las reglas de serialización, mientras que los hosts, puertos predeterminados y otros componentes pueden adoptar la forma canónica producida por el analizador estándar.
Utilice el resultado serializado sin iniciar una solicitud
El resultado contiene absolute_url, la URL normalizada y serializada tras la resolución. No se realiza ninguna consulta DNS, petición HTTP, descarga, comprobación de disponibilidad ni seguimiento de redirecciones. Esta separación resulta útil cuando se necesita una transformación determinista y no una prueba del sitio en vivo: las mismas dos entradas siempre producen la misma salida, aunque el host no exista o el recurso sea privado. Use el resultado para normalizar enlaces extraídos de HTML, preparar colas de rastreo, ampliar referencias de feeds, validar datos de prueba, crear entradas de sitemap o comparar URL de forma coherente antes de eliminar duplicados. Recuerde que la resolución sintáctica no demuestra que el destino sea seguro, accesible, público o autorizado. Si los valores proceden de usuarios no confiables, aplique la política de esquemas, hosts y acceso de red de su aplicación antes de solicitar la URL devuelta. La API y el ejecutor del navegador comparten el mismo algoritmo puro. Cada solicitud de API cuesta $0.002; la ejecución local en esta página es gratuita.
Qué puede hacer con ella
Ampliar enlaces extraídos de una página
Convierta valores relativos de href y src en URL absolutas mediante la URL del documento de origen.
Normalizar entradas de una cola de rastreo
Resuelva segmentos de punto, rutas desde la raíz, consultas y fragmentos antes del rastreo o la deduplicación.
Probar rutas y datos URL
Genere URL esperadas y deterministas para pruebas sin contactar hosts ni depender del estado de la red.
Preguntas frecuentes
¿Qué cambia una barra final en la URL base?
Determina si el último segmento se interpreta como directorio. Sin barra, una ruta relativa sencilla sustituye ese segmento; con barra, se añade dentro del directorio.
¿Puede la referencia relativa ser una URL absoluta?
Sí. La resolución estándar devuelve esa URL absoluta sin depender de la base y aplica la serialización normal.
¿Se comprueba si la URL resuelta existe?
No. No se efectúan solicitudes de red, consultas DNS, comprobaciones de redirección ni pruebas de disponibilidad.
¿Se admiten referencias que solo contienen consulta o fragmento?
Sí. Una referencia iniciada con ? sustituye la consulta; una iniciada con # cambia el fragmento según las reglas estándar.
¿Qué ocurre si la URL base es relativa?
La solicitud falla con un error de entrada inválida porque una base relativa no aporta contexto suficiente para producir una URL absoluta.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/web/absolute-url-resolve \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"base_url":"https://example.com/docs/guides/start.html","relative_reference":"../images/logo.svg?theme=dark#mark"}'const res = await fetch("https://api.kit.forhosting.com/web/absolute-url-resolve", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"base_url": "https://example.com/docs/guides/start.html",
"relative_reference": "../images/logo.svg?theme=dark#mark"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/absolute-url-resolve",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"base_url": "https://example.com/docs/guides/start.html",
"relative_reference": "../images/logo.svg?theme=dark#mark"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/absolute-url-resolve", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"base_url":"https://example.com/docs/guides/start.html","relative_reference":"../images/logo.svg?theme=dark#mark"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"base_url":"https://example.com/docs/guides/start.html","relative_reference":"../images/logo.svg?theme=dark#mark"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/absolute-url-resolve", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"base_url": "https://example.com/docs/guides/start.html",
"relative_reference": "../images/logo.svg?theme=dark#mark"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.absolute_url_resolve",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
timeout_sec | 30 |
max_crawl_pages | 25 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |