Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions apps/docs/public/.htaccess
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,75 @@ ErrorDocument 404 /lossless/404.html
</IfModule>
<FilesMatch "\.mdx?$">
Header set X-Robots-Tag "noindex"
# Negotiated responses serve .md twins at canonical URLs: keep those indexable.
Header unset X-Robots-Tag env=REDIRECT_NEGOTIATED_MD
</FilesMatch>
<FilesMatch "^llms(-full|-small)?\.txt$">
Header set X-Robots-Tag "noindex"
</FilesMatch>

# Agent discovery (isitagentready): Apache port of dist/_headers.
# Apache ignores that file, so this is what actually ships headers under /lossless.
<IfModule mod_mime.c>
AddType application/json .json
</IfModule>

# Compound extension needs a filename match: AddType splits on dots.
<FilesMatch "\.tar\.gz$">
ForceType application/gzip
</FilesMatch>

# Homepage Link header (RFC 8288 / RFC 9727 s3). Minimal form. Keep in sync with dist/_headers.
<IfModule mod_setenvif.c>
SetEnvIf Request_URI "^/lossless/$" IS_LOSSLESS_HOME
SetEnvIf Request_URI "^/lossless/index\.html$" IS_LOSSLESS_HOME
</IfModule>
<IfModule mod_headers.c>
Header always set Link "</lossless/.well-known/api-catalog>; rel=\"api-catalog\"; type=\"application/linkset+json\", </lossless/.well-known/ai-catalog.json>; rel=\"ai-catalog\"; type=\"application/ai-catalog+json\", </lossless/openapi.json>; rel=\"service-desc\"; type=\"application/json\", </lossless/agent-readability.json>; rel=\"describedby\"; type=\"application/json\", </lossless/llms.txt>; rel=\"describedby\"; type=\"text/plain\", </lossless/index.md>; rel=\"alternate\"; type=\"text/markdown\"" env=IS_LOSSLESS_HOME
# Internal rewrites rename request env vars with a REDIRECT_ prefix.
Header always set Link "</lossless/.well-known/api-catalog>; rel=\"api-catalog\"; type=\"application/linkset+json\", </lossless/.well-known/ai-catalog.json>; rel=\"ai-catalog\"; type=\"application/ai-catalog+json\", </lossless/openapi.json>; rel=\"service-desc\"; type=\"application/json\", </lossless/agent-readability.json>; rel=\"describedby\"; type=\"application/json\", </lossless/llms.txt>; rel=\"describedby\"; type=\"text/plain\", </lossless/index.md>; rel=\"alternate\"; type=\"text/markdown\"" env=REDIRECT_IS_LOSSLESS_HOME
</IfModule>

# Extensionless file needs explicit type (else text/plain fails the scan).
<Files "api-catalog">
ForceType 'application/linkset+json; profile="https://www.rfc-editor.org/info/rfc9727"'
</Files>

# Serve the catalog with its advertised media type (matches Link rel=ai-catalog).
<Files "ai-catalog.json">
ForceType application/ai-catalog+json
</Files>

<IfModule mod_headers.c>
<FilesMatch "(^ai-catalog\.json$|^ard\.json$|^api-catalog$|^agent-readability\.json$|index\.json$)">
Header set Access-Control-Allow-Origin "*"
</FilesMatch>
</IfModule>

# Pragmatic Accept: text/markdown (static-first, not strict RFC).
# Subdir rules shadow the domain-root rewrite block, so both live here.
<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_URI} \.(css|js|mjs|map|png|jpe?g|webp|gif|svg|avif|ico|woff2?|ttf|otf|eot|xml|txt|json|pdf|mp4|webm|mp3|wav|ogg|zip)$ [NC]
RewriteRule ^ - [L]
RewriteCond %{REQUEST_URI} \.mdx?$ [NC]
RewriteRule ^ - [L]

# /lossless/ -> /lossless/index.md
RewriteCond %{HTTP:Accept} text/markdown [NC]
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved
RewriteCond %{HTTP:Accept} !text/markdown(?:\s*;\s*(?!q\s*=)[^;,]+)*\s*;\s*q\s*=\s*0(\.0*)?(\s*[;,]|\s*$) [NC]
RewriteRule ^$ /lossless/index.md [L,T=text/markdown,E=NEGOTIATED_MD:1]

# /lossless/index.html -> /lossless/index.md (same representation as /lossless/)
RewriteCond %{HTTP:Accept} text/markdown [NC]
RewriteCond %{HTTP:Accept} !text/markdown(?:\s*;\s*(?!q\s*=)[^;,]+)*\s*;\s*q\s*=\s*0(\.0*)?(\s*[;,]|\s*$) [NC]
RewriteRule ^index\.html$ /lossless/index.md [L,T=text/markdown,E=NEGOTIATED_MD:1]

# /lossless/<route> -> twin .md
RewriteCond %{HTTP:Accept} text/markdown [NC]
RewriteCond %{HTTP:Accept} !text/markdown(?:\s*;\s*(?!q\s*=)[^;,]+)*\s*;\s*q\s*=\s*0(\.0*)?(\s*[;,]|\s*$) [NC]
RewriteCond %{REQUEST_FILENAME} !\.md$ [NC]
RewriteCond %{DOCUMENT_ROOT}/lossless/$1.md -f
RewriteRule ^(.+?)/?$ /lossless/$1.md [L,T=text/markdown,E=NEGOTIATED_MD:1]
</IfModule>
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved
Loading