Skip to content

Library to generate and name a page to use as a short link and redirect to another page on your site.

License

Notifications You must be signed in to change notification settings

jerus-org/link-bridge

Repository files navigation

link-bridge

Crates.io Documentation circleci-badge MIT licensed Rust 1.81+ BuyMeaCoffee GitHubSponsors

A lightweight Rust library for creating URL redirects with short names that generate web pages redirecting to longer links on your website.

This crate provides a simple and efficient way to create HTML redirect pages that automatically forward users from short, memorable paths to longer URLs on your website. Perfect for creating user-friendly shortcuts, maintaining backward compatibility after URL changes, or implementing a simple URL shortening system.

Features

  • 🚀 Fast and lightweight - Minimal dependencies and efficient operation
  • 🔧 Simple API - Easy-to-use interface for creating redirects
  • 🎯 URL validation - Ensures paths contain only valid characters
  • 📁 Automatic file management - Creates directories and HTML files automatically
  • 📋 Registry system - Prevents duplicate redirects and ensures consistency
  • 🌐 Standards compliant - Generates proper HTML5 with multiple redirect methods
  • 🔒 Safe - Built with Rust's memory safety and error handling

Quick Start

Add this to your Cargo.toml:

[dependencies]
link-bridge = "0.2.2"

Basic Usage

use link_bridge::Redirector;

// Create a redirector for a URL path
let mut redirector = Redirector::new("api/v1/users").unwrap();

// Optionally customize the output directory
redirector.set_path("redirects");

// Generate the redirect HTML file
let redirect_path = redirector.write_redirect().unwrap();

This creates an HTML file that automatically redirects visitors from your short URL to the longer target path using multiple redirect methods for maximum compatibility.

How It Works

  1. URL Validation: Input paths are validated to ensure they contain only safe characters
  2. Unique Naming: Short file names are generated using base62 encoding and timestamps
  3. Registry Check: System checks if a redirect for this URL path already exists
  4. HTML Generation: Complete HTML5 pages are created with multiple redirect methods:
    • Meta refresh tag (universal browser support)
    • JavaScript redirect (faster when JS is enabled)
    • Manual fallback link (accessibility and fail-safe)
  5. File Management: Directories are created automatically and files are written to disk
  6. Registry Update: The registry is updated to track the new redirect mapping

Generated HTML Structure

The library creates complete HTML5 pages that work across all browsers:

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="refresh" content="0; url=/your/target/path/">
    <script type="text/javascript">
        window.location.href = "/your/target/path/";
    </script>
    <title>Page Redirection</title>
</head>
<body>
    If you are not redirected automatically, follow this 
    <a href='/your/target/path/'>link</a>.
</body>
</html>

Error Handling

The library uses comprehensive error handling:

use link_bridge::{Redirector, RedirectorError};

match Redirector::new("invalid?path") {
    Ok(redirector) => println!("Success!"),
    Err(RedirectorError::InvalidUrlPath(e)) => {
        println!("Invalid path: {}", e);
    }
    Err(e) => println!("Other error: {}", e),
}

Documentation

For comprehensive API documentation, examples, and advanced usage patterns, visit:

📚 Documentation on docs.rs

Contributing

We welcome contributions! Please see CONTRIBUTING.md for guidelines.

Development Setup

git clone https://github.com/jerus-org/link-bridge.git
cd link-bridge
cargo build
cargo test

Running Tests

# Run all tests
cargo test

# Run with coverage
cargo tarpaulin --out html

Changelog

See CHANGELOG.md for version history and breaking changes.

Licence

This project is licensed under the MIT Licence - see the LICENCE file for details.

Acknowledgments

  • Inspired by URL shortening services like bit.ly and tinyurl
  • Thanks to the Rust community for feedback and contributions

For questions, issues, or feature requests, please open an issue on GitHub.

About

Library to generate and name a page to use as a short link and redirect to another page on your site.

Resources

License

Stars

Watchers

Forks

Sponsor this project

  •  

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages