How sites work on Flexweg

Flexweg hosts static websites. You upload a folder of HTML, CSS, JavaScript and media files, and those exact files are served from your domain. There is no PHP, no Node.js, no database — which is exactly what makes static sites fast, reliable and inexpensive to host.
This page explains how Flexweg maps URLs to the files you upload, so you can predict where every page and asset will live before you hit "deploy".
Supported file types
Any file with one of the extensions below can be uploaded and served. Anything else is rejected.
| Category | Extensions |
|---|---|
| Web | .html, .css, .js, .json, .xml, .txt |
| Images | .jpg, .png, .gif, .svg, .webp, .ico |
| Documents | .pdf |
| Fonts | .woff, .woff2, .ttf, .otf |
| Video | .mp4, .webm, .ogg, .mov |
Flexweg automatically sends the correct Content-Type header so browsers know how to display each file.
The single rule: URLs map to files
Whatever path a visitor types after your domain, Flexweg looks for a file at that path inside your upload:
Visitor asks for: mysite.flexweg.com/about.html
Flexweg serves: /about.html (from your upload)
That's the whole model. The only exception — and it's a very useful one — concerns folders.
The index.html convention
When a URL points to a folder (a path ending with /, or that doesn't map to a specific file), Flexweg looks for a file called index.html inside that folder and serves it.
Visitor asks for: mysite.flexweg.com/
Flexweg serves: /index.html
Visitor asks for: mysite.flexweg.com/products/
Flexweg serves: /products/index.html
This lets you write clean URLs like /products/ instead of /products/index.html.
Automatic redirect of /index.html
If someone explicitly types the index.html part, Flexweg redirects them to the clean URL:
| Visitor types | Flexweg redirects to |
|---|---|
mysite.flexweg.com/index.html | mysite.flexweg.com/ |
mysite.flexweg.com/blog/index.html | mysite.flexweg.com/blog/ |
Why it matters: it prevents two different URLs from showing the same page, which search engines penalize ("duplicate content").
A concrete example
Suppose you upload this folder structure:
mysite/
├── index.html
├── about.html
├── products/
│ ├── index.html
│ ├── chair.html
│ └── table.html
├── blog/
│ ├── index.html
│ └── welcome.html
└── assets/
├── style.css
├── main.js
└── logo.png
Here is how every URL resolves:
| URL | File served |
|---|---|
mysite.flexweg.com/ | /index.html |
mysite.flexweg.com/about.html | /about.html |
mysite.flexweg.com/products/ | /products/index.html |
mysite.flexweg.com/products/chair.html | /products/chair.html |
mysite.flexweg.com/blog/ | /blog/index.html |
mysite.flexweg.com/blog/welcome.html | /blog/welcome.html |
mysite.flexweg.com/assets/style.css | /assets/style.css |
mysite.flexweg.com/assets/logo.png | /assets/logo.png |
The rule is consistent: what you upload is what you get.
How styles, scripts and images are loaded
When a browser requests index.html, Flexweg returns only that file. The browser then reads the HTML, finds the references to CSS, JS and images, and requests each of them separately. Flexweg serves each one from wherever it sits in your upload.
A typical index.html looks like this:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>My site</title>
<!-- Stylesheet -->
<link rel="stylesheet" href="/assets/style.css">
<!-- Favicon -->
<link rel="icon" href="/assets/favicon.ico">
</head>
<body>
<h1>Welcome</h1>
<img src="/assets/logo.png" alt="My logo">
<!-- JavaScript, deferred so it runs after the page parses -->
<script src="/assets/main.js" defer></script>
</body>
</html>
Every href and src attribute triggers an additional request. The browser sees:
GET /→ Flexweg returns/index.htmlGET /assets/style.css→ Flexweg returns that fileGET /assets/favicon.ico→ Flexweg returns that fileGET /assets/logo.png→ Flexweg returns that fileGET /assets/main.js→ Flexweg returns that file
If any of those files is missing or has a typo in its path, the browser shows a broken image or an unstyled page. Always check the Network tab of your browser DevTools when something looks wrong — it tells you exactly which file failed.
Absolute vs relative paths
You have two ways to reference an asset:
| Path style | Example | Resolves from… |
|---|---|---|
Absolute (starts with /) | /assets/logo.png | The site root |
Relative (no leading /) | assets/logo.png or ../logo.png | The current HTML file's folder |
Recommendation: use absolute paths (/assets/...) whenever possible. They work identically from every page on your site, whereas relative paths break as soon as you move a file into a subfolder.
Building your first site — step by step
Here is the shortest path from an empty folder to a live site.
1. Create the folder structure locally
Open any text editor and create these three files:
my-first-site/
├── index.html
└── assets/
└── style.css
2. Write the HTML
index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>My first Flexweg site</title>
<link rel="stylesheet" href="/assets/style.css">
</head>
<body>
<h1>Hello, Flexweg</h1>
<p>This static site is served directly from my upload.</p>
</body>
</html>
3. Add some styles
assets/style.css:
body {
font-family: system-ui, -apple-system, sans-serif;
max-width: 640px;
margin: 3rem auto;
padding: 0 1rem;
line-height: 1.6;
color: #1e293b;
}
h1 {
color: #667eea;
letter-spacing: -0.02em;
}
4. Upload to Flexweg
Zip the my-first-site/ folder (or push it through your usual deploy pipeline), then upload it to your Flexweg site. The entire folder is now accessible from your domain.
5. Visit the site
Open mysite.flexweg.com. The browser asks for /, Flexweg finds /index.html, returns it, and the page appears. Any change to the files goes live within seconds of re-uploading.
Adding a second page
Suppose you want an "About" page reachable at mysite.flexweg.com/about. You have two options — both valid, but one is cleaner.
Option A — Clean URL (recommended)
Create a new folder about/ containing its own index.html:
my-first-site/
├── index.html
├── about/