> ## Documentation Index
> Fetch the complete documentation index at: https://tomee-mintlify-8b260758.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Deploy at a subpath with AWS Route 53 and CloudFront

> Deploy your Mintlify documentation at a subpath on AWS using Route 53 for DNS routing and CloudFront as a CDN with Lambda@Edge functions.

To host your documentation at a subpath such as `yoursite.com/docs` using AWS Route 53 and CloudFront, configure your DNS provider to point to your CloudFront distribution.

Before configuring AWS, set your base path in your dashboard:

1. Navigate to the [Custom domain setup](https://app.mintlify.com/settings/deployment/custom-domain) page in your dashboard.
2. Enable the **Host at** toggle.
3. Enter your domain.
4. Enter your base path. For example, `/docs` or `/help`.
5. Click **Add domain**.

## Overview

<Note>
  The following examples use the `/docs` base path. If you use a different base path, replace `/docs` with your base path.
</Note>

Route traffic to these paths with a Cache Policy of **CachingDisabled**:

* `/.well-known/acme-challenge/*` - Required for Let's Encrypt certificate verification
* `/.well-known/vercel/*` - Required for domain verification
* `/docs/*` - Required for subpath routing
* `/docs/` - Required for subpath routing
* `/_mintlify/*` - Required for API playground requests

Route traffic to these paths with a Cache Policy of **CachingEnabled**:

* `/mintlify-assets/*` - Required for CSS, JavaScript, and favicons
* `Default (*)` - Your website's landing page

All Behaviors must have an **origin request policy** of `AllViewerExceptHostHeader`.

The behaviors for your subpath must allow all HTTP methods. CloudFront only allows `GET` and `HEAD` requests by default. This blocks the `POST` requests that Mintlify uses for analytics and other interactive features.

<img src="https://mintcdn.com/tomee-mintlify-8b260758/H4xb41Don-IzxrI3/images/cloudfront/all-behaviors.png?fit=max&auto=format&n=H4xb41Don-IzxrI3&q=85&s=4aa4bfd1424e756bd89012788b175669" alt="CloudFront &#x22;Behaviors&#x22; page with 4 behaviors: /docs/*, /docs, Default, and /.well-known/*." width="1603" height="365" data-path="images/cloudfront/all-behaviors.png" />

## Create CloudFront distribution

1. Navigate to [CloudFront](https://aws.amazon.com/cloudfront) inside the AWS console.
2. Click **Create distribution**.

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-8b260758/H4xb41Don-IzxrI3/images/cloudfront/create-distribution.png?fit=max&auto=format&n=H4xb41Don-IzxrI3&q=85&s=efb5c66226c30699cb90d690507dd083" alt="CloudFront Distributions page with the &#x22;Create distribution&#x22; button emphasized." width="3024" height="922" data-path="images/cloudfront/create-distribution.png" />
</Frame>

3. For the Origin domain, input `[SUBDOMAIN].mintlify.site` where `[SUBDOMAIN]` is your project's unique subdomain.

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-8b260758/H4xb41Don-IzxrI3/images/cloudfront/origin-name.png?fit=max&auto=format&n=H4xb41Don-IzxrI3&q=85&s=4409a970049fecf5a1c6e6b53dfc4a33" alt="CloudFront &#x22;Create distribution&#x22; page showing &#x22;acme.mintlify.site&#x22; as the origin domain." width="1495" height="1036" data-path="images/cloudfront/origin-name.png" />
</Frame>

4. For "Web Application Firewall (WAF)," enable security protections.

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-8b260758/H4xb41Don-IzxrI3/images/cloudfront/enable-security-protections.png?fit=max&auto=format&n=H4xb41Don-IzxrI3&q=85&s=731e4c2b49c75a4af24e7cca14fc3447" alt="Web Application Firewall (WAF) options with &#x22;Enable security protections&#x22; selected." width="1482" height="877" data-path="images/cloudfront/enable-security-protections.png" />
</Frame>

<Note>
  WAF rules can block the `POST` requests that Mintlify uses for analytics and other interactive features. If analytics stop appearing in your dashboard after enabling WAF, check your WAF logs. Look for blocked requests to paths under `/docs/_mintlify/`.
</Note>

5. The remaining settings should be default.
6. Click **Create distribution**.

## Add default origin

1. After creating the distribution, navigate to the "Origins" tab.

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-8b260758/H4xb41Don-IzxrI3/images/cloudfront/origins.png?fit=max&auto=format&n=H4xb41Don-IzxrI3&q=85&s=e753d845a4e5ed381c4da6389f7e45e3" alt="A CloudFront distribution with the &#x22;Origins&#x22; tab highlighted." width="3024" height="1466" data-path="images/cloudfront/origins.png" />
</Frame>

2. Find your staging URL that mirrors the main domain. This varies depending on your landing page host. For example, the Mintlify staging URL is [mintlify-landing-page.vercel.app](https://mintlify-landing-page.vercel.app).

<Info>
  If Webflow hosts your landing page, use Webflow's staging URL. It would look like `.webflow.io`.

  If you use Vercel, use the `.vercel.app` domain available for every project.
</Info>

3. Create a new Origin and add your staging URL as the "Origin domain."

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-8b260758/H4xb41Don-IzxrI3/images/cloudfront/default-origin.png?fit=max&auto=format&n=H4xb41Don-IzxrI3&q=85&s=7e247fb6b60ff2dfaa39ef0f9c14f027" alt="CloudFront &#x22;Create origin&#x22; page with a &#x22;Origin domain&#x22; input field highlighted." width="3024" height="1332" data-path="images/cloudfront/default-origin.png" />
</Frame>

You should now have two Origins: one with `[SUBDOMAIN].mintlify.site` and another with your staging URL.

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-8b260758/H4xb41Don-IzxrI3/images/cloudfront/final-origins.png?fit=max&auto=format&n=H4xb41Don-IzxrI3&q=85&s=5a348cfcb9a48896dcae71a521862dfc" alt="CloudFront &#x22;Origins&#x22; page with two origins: One for mintlify and another for mintlify-landing-page." width="1230" height="690" data-path="images/cloudfront/final-origins.png" />
</Frame>

## Set behaviors

Behaviors in CloudFront enable control over the subpath logic. At a high level, you create the following logic:

* **If a user lands on your custom subpath**, go to `[SUBDOMAIN].mintlify.site`.
* **If a user lands on any other page**, go to the current landing page.

1. Navigate to the "Behaviors" tab of your CloudFront distribution.

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-8b260758/H4xb41Don-IzxrI3/images/cloudfront/behaviors.png?fit=max&auto=format&n=H4xb41Don-IzxrI3&q=85&s=b4a6b13ad348e5b9395a99d32e65f889" alt="CloudFront &#x22;Behaviors&#x22; tab highlighted." width="3024" height="1384" data-path="images/cloudfront/behaviors.png" />
</Frame>

2. Click the **Create behavior** button and create the following behaviors.

### `/.well-known/*`

Create behaviors for Vercel domain verification paths with a **Path pattern** of `/.well-known/*` and set **Origin and origin groups** to your docs URL.

For "Cache policy," select **CachingDisabled** to ensure these verification requests pass through without caching.

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-8b260758/H4xb41Don-IzxrI3/images/cloudfront/well-known-policy.png?fit=max&auto=format&n=H4xb41Don-IzxrI3&q=85&s=9e6d02e1ae3ce60f4fea82594097b080" alt="CloudFront &#x22;Create behavior&#x22; page with a &#x22;Path pattern&#x22; of &#x22;/.well-known/*&#x22; and &#x22;Origin and origin groups&#x22; pointing to the staging URL." width="1413" height="1098" data-path="images/cloudfront/well-known-policy.png" />
</Frame>

<Info>
  If `.well-known/*` is too generic, narrow it down to at least 2 behaviors for Vercel:

  * `/.well-known/vercel/*` - Required for Vercel domain verification
  * `/.well-known/acme-challenge/*` - Required for Let's Encrypt certificate verification
</Info>

### Your subpath

Create a behavior with a **Path pattern** of your chosen subpath, for example `/docs`. Set **Origin and origin groups** to the `.mintlify.site` URL (for example, `acme.mintlify.site`).

* Set "Cache policy" to **CachingDisabled**.
* Set "Origin request policy" to **AllViewerExceptHostHeader**.
* Set "Viewer protocol policy" to **Redirect HTTP to HTTPS**.
* Set "Allowed HTTP methods" to **GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE**.

<Warning>
  CloudFront only allows `GET` and `HEAD` requests by default. If you don't allow all HTTP methods, CloudFront rejects the `POST` requests that Mintlify uses for analytics. Your dashboard won't show any page views even though your docs load normally.
</Warning>

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-8b260758/H4xb41Don-IzxrI3/images/cloudfront/behavior-1.png?fit=max&auto=format&n=H4xb41Don-IzxrI3&q=85&s=1525c4b2206a3f369674ab4bb9f733e2" alt="CloudFront &#x22;Create behavior&#x22; page with a &#x22;Path pattern&#x22; of &#x22;/docs/*&#x22; and &#x22;Origin and origin groups&#x22; pointing to the acme.mintlify.site URL." width="1520" height="1117" data-path="images/cloudfront/behavior-1.png" />
</Frame>

### Your subpath with wildcard

Create a behavior with a **Path pattern** of your chosen subpath followed by `/*`, for example `/docs/*`, and **Origin and origin groups** pointing to the same `.mintlify.site` URL.

These settings should exactly match your base subpath behavior, with the exception of the **Path pattern**.

* Set "Cache policy" to **CachingDisabled**.
* Set "Origin request policy" to **AllViewerExceptHostHeader**.
* Set "Viewer protocol policy" to **Redirect HTTP to HTTPS**.
* Set "Allowed HTTP methods" to **GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE**.

### `/mintlify-assets/*`

Create a behavior with a **Path pattern** of `/mintlify-assets/*` and set **Origin and origin groups** to the `.mintlify.site` URL. This path serves the CSS, JavaScript, and favicons for your documentation from the root of your domain.

* Set "Cache policy" to **CachingOptimized**.
* Set "Origin request policy" to **AllViewerExceptHostHeader**.
* Set "Viewer protocol policy" to **Redirect HTTP to HTTPS**.

### `/_mintlify/*`

Create a behavior with a **Path pattern** of `/_mintlify/*` and set **Origin and origin groups** to the `.mintlify.site` URL. This path handles API playground requests from the root of your domain.

* Set "Cache policy" to **CachingDisabled**.
* Set "Origin request policy" to **AllViewerExceptHostHeader**.
* Set "Viewer protocol policy" to **Redirect HTTP to HTTPS**.
* Set "Allowed HTTP methods" to **GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE**.

### `Default (*)`

Edit the `Default (*)` behavior.

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-8b260758/H4xb41Don-IzxrI3/images/cloudfront/default-behavior-1.png?fit=max&auto=format&n=H4xb41Don-IzxrI3&q=85&s=a122ec69b4a506e2781722aa280cbf00" alt="A CloudFront distribution with the &#x22;Default (*)&#x22; behavior selected and the Edit button emphasized." width="3024" height="1406" data-path="images/cloudfront/default-behavior-1.png" />
</Frame>

1. Change the default behavior's **Origin and origin groups** to the staging URL (for example, `mintlify-landing-page.vercel.app`).

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-8b260758/H4xb41Don-IzxrI3/images/cloudfront/default-behavior-2.png?fit=max&auto=format&n=H4xb41Don-IzxrI3&q=85&s=db8d5de4c61b6e827a4d58a3909500e5" alt="CloudFront &#x22;Edit behavior&#x22; page with the &#x22;Origin and origin groups&#x22; input field highlighted." width="3024" height="1298" data-path="images/cloudfront/default-behavior-2.png" />
</Frame>

2. Click **Save changes**.

### Check that you set up behaviors correctly

If you follow the preceding steps, your behaviors should look like this:

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-8b260758/H4xb41Don-IzxrI3/images/cloudfront/all-behaviors.png?fit=max&auto=format&n=H4xb41Don-IzxrI3&q=85&s=4aa4bfd1424e756bd89012788b175669" alt="CloudFront &#x22;Behaviors&#x22; page with 4 behaviors: /docs/*, /docs, Default, and /.well-known/*." width="1603" height="365" data-path="images/cloudfront/all-behaviors.png" />
</Frame>

## Preview distribution

To test your distribution, go to the "General" tab and visit the **Distribution domain name** URL.

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-8b260758/H4xb41Don-IzxrI3/images/cloudfront/preview-distribution.png?fit=max&auto=format&n=H4xb41Don-IzxrI3&q=85&s=4106d9db6b43660e357d63fd36da42f2" alt="CloudFront &#x22;General&#x22; tab with the &#x22;Distribution domain name&#x22; URL highlighted." width="3024" height="1394" data-path="images/cloudfront/preview-distribution.png" />
</Frame>

All pages should route to your main landing page. When you append your chosen subpath, for example `/docs`, the URL should serve your Mintlify documentation.

## Connect with Route 53

Next, connect the CloudFront distribution to your primary domain.

<Note>
  For this section, you can also refer to AWS's official guide on [Configuring
  Amazon Route 53 to route traffic to a CloudFront
  distribution](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-cloudfront-distribution.html#routing-to-cloudfront-distribution-config).
</Note>

1. Navigate to [Route53](https://aws.amazon.com/route53) inside the AWS console.
2. Navigate to the "Hosted zone" for your primary domain.
3. Click **Create record**.

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-8b260758/H4xb41Don-IzxrI3/images/cloudfront/route53-create-record.png?fit=max&auto=format&n=H4xb41Don-IzxrI3&q=85&s=32b339e979f9f37afa4c585938cb35a3" alt="Route 53 &#x22;Records&#x22; page with the &#x22;Create record&#x22; button emphasized." width="1540" height="1238" data-path="images/cloudfront/route53-create-record.png" />
</Frame>

4. Toggle `Alias` and then **Route traffic to** the `Alias to CloudFront distribution` option.

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-8b260758/H4xb41Don-IzxrI3/images/cloudfront/create-record-alias.png?fit=max&auto=format&n=H4xb41Don-IzxrI3&q=85&s=228d727d63e8cb43589f5b50b9b66c5b" alt="Route 53 &#x22;Create record&#x22; page with the &#x22;Alias&#x22; toggle and the &#x22;Route traffic to&#x22; menu highlighted." width="3024" height="1494" data-path="images/cloudfront/create-record-alias.png" />
</Frame>

5. Click **Create records**.

<Note>
  You may need to remove the existing A record if one currently exists.
</Note>

Your documentation is now live at your chosen subpath for your primary domain.

<Note>
  After you deploy your changes, your documentation is usually available at your subpath within a few minutes. If your setup includes DNS changes, propagation can take 1-4 hours, and in rare cases up to 48 hours. If your documentation is not immediately available, wait before troubleshooting.
</Note>
