This is an automated email from the ASF dual-hosted git repository.

ptupitsyn pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite-website.git


The following commit(s) were added to refs/heads/master by this push:
     new 2cdecb8982 IGNITE-27756 Fix Ignite 3 docs URL resolving (#314)
2cdecb8982 is described below

commit 2cdecb89829bdd4a04a59bb82c0308f3d939e5cd
Author: Alexey Alexandrov <[email protected]>
AuthorDate: Thu Feb 5 16:41:28 2026 +0200

    IGNITE-27756 Fix Ignite 3 docs URL resolving (#314)
---
 .htaccess | 144 ++++++++++++++++++++++++++++++++------------------------------
 1 file changed, 74 insertions(+), 70 deletions(-)

diff --git a/.htaccess b/.htaccess
index cf49d4159a..0c1dae0036 100644
--- a/.htaccess
+++ b/.htaccess
@@ -1,85 +1,78 @@
 <IfModule mod_deflate.c>
-# Insert filters / compress text, html, javascript, css, xml:
-# mod_deflate can be used for Apache v2 and later and is the recommended GZip 
mechanism to use
-AddOutputFilterByType DEFLATE text/plain
-AddOutputFilterByType DEFLATE text/javascript
-AddOutputFilterByType DEFLATE text/html
-AddOutputFilterByType DEFLATE text/xml
-AddOutputFilterByType DEFLATE text/css
-AddOutputFilterByType DEFLATE application/js
-AddOutputFilterByType DEFLATE application/javascript
-AddOutputFilterByType DEFLATE application/x-font-ttf 
-AddOutputFilterByType DEFLATE font/opentype 
-AddOutputFilterByType DEFLATE image/svg+xml
-AddOutputFilterByType DEFLATE image/x-icon 
-
-# Exception: Images
-SetEnvIfNoCase REQUEST_URI \.(?:gif|jpg|jpeg|png)$ no-gzip dont-vary
-
-# Drop problematic browsers
-BrowserMatch ^Mozilla/4 gzip-only-text/html
-BrowserMatch ^Mozilla/4\.0[678] no-gzip
-BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
-
-# Make sure proxies don't deliver the wrong content
-<IfModule mod_headers.c>
-Header append Vary User-Agent env=!dont-vary
-</IfModule>
-
+  # Insert filters / compress text, html, javascript, css, xml:
+  # mod_deflate can be used for Apache v2 and later and is the recommended 
GZip mechanism to use
+  AddOutputFilterByType DEFLATE text/plain
+  AddOutputFilterByType DEFLATE text/javascript
+  AddOutputFilterByType DEFLATE text/html
+  AddOutputFilterByType DEFLATE text/xml
+  AddOutputFilterByType DEFLATE text/css
+  AddOutputFilterByType DEFLATE application/js
+  AddOutputFilterByType DEFLATE application/javascript
+  AddOutputFilterByType DEFLATE application/x-font-ttf
+  AddOutputFilterByType DEFLATE font/opentype
+  AddOutputFilterByType DEFLATE image/svg+xml
+  AddOutputFilterByType DEFLATE image/x-icon
+
+  # Exception: Images
+  SetEnvIfNoCase REQUEST_URI \.(?:gif|jpg|jpeg|png)$ no-gzip dont-vary
+
+  # Drop problematic browsers
+  BrowserMatch ^Mozilla/4 gzip-only-text/html
+  BrowserMatch ^Mozilla/4\.0[678] no-gzip
+  BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
+
+  # Make sure proxies don't deliver the wrong content
+  <IfModule mod_headers.c>
+    Header append Vary User-Agent env=!dont-vary
+  </IfModule>
 </IfModule>
 
 <IfModule mod_expires.c>
-ExpiresActive On
-ExpiresDefault "access plus 1 week"
+  ExpiresActive On
+  ExpiresDefault "access plus 1 week"
 
-ExpiresByType text/css "access plus 1 month"
-ExpiresByType text/javascript "access plus 1 month"
+  ExpiresByType text/css "access plus 1 month"
+  ExpiresByType text/javascript "access plus 1 month"
 
-ExpiresByType text/xml "access plus 2 days" 
+  ExpiresByType text/xml "access plus 2 days"
 
-ExpiresByType image/x-icon "access plus 6 months"
-ExpiresByType image/jpg "access plus 6 months"
-ExpiresByType image/jpeg "access plus 6 months"
-ExpiresByType image/gif "access plus 6 months"
-ExpiresByType image/png "access plus 6 months"
-ExpiresByType image/svg+xml "access plus 6 months" 
+  ExpiresByType image/x-icon "access plus 6 months"
+  ExpiresByType image/jpg "access plus 6 months"
+  ExpiresByType image/jpeg "access plus 6 months"
+  ExpiresByType image/gif "access plus 6 months"
+  ExpiresByType image/png "access plus 6 months"
+  ExpiresByType image/svg+xml "access plus 6 months"
 
-ExpiresByType application/pdf "access plus 6 months"
-
-ExpiresByType font/eot "access plus 6 months"
-ExpiresByType font/opentype "access plus 6 months" 
-ExpiresByType font/woff2 "access plus 6 months"
+  ExpiresByType application/pdf "access plus 6 months"
 
+  ExpiresByType font/eot "access plus 6 months"
+  ExpiresByType font/opentype "access plus 6 months"
+  ExpiresByType font/woff2 "access plus 6 months"
 </IfModule>
 
-
 <IfModule mod_headers.c>
+  <FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|svg)$">
+    Header set Cache-Control "max-age=31536000, public"
+  </FilesMatch>
 
+  <FilesMatch "\.(xml)$">
+    Header set Cache-Control "max-age=172800, public, must-revalidate"
+  </FilesMatch>
 
-<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|svg)$">
-Header set Cache-Control "max-age=31536000, public"
-</FilesMatch>
-
-<FilesMatch "\.(xml)$">
-Header set Cache-Control "max-age=172800, public, must-revalidate"
-</FilesMatch>
-
-<FilesMatch "\.(html|htm|txt)$">
-Header set Cache-Control "no-cache, no-store, must-revalidate"
-Header set Pragma "no-cache"
-Header set Expires 0
-</FilesMatch>
-
-<FilesMatch "\.(yaml|yml)$">
-  Header set Content-Disposition "attachment"
-</FilesMatch>
+  <FilesMatch "\.(html|htm|txt)$">
+    Header set Cache-Control "no-cache, no-store, must-revalidate"
+    Header set Pragma "no-cache"
+    Header set Expires 0
+  </FilesMatch>
 
+  <FilesMatch "\.(yaml|yml)$">
+    Header set Content-Disposition "attachment"
+  </FilesMatch>
 </IfModule>
 
-
 <IfModule mod_headers.c>
   <FilesMatch "\.(js|css|xml|gz|html|ttf)$">
-    Header append Vary: Accept-Encoding
+    Header append Vary "Accept-Encoding"
   </FilesMatch>
 </IfModule>
 
@@ -158,12 +151,11 @@ Redirect 301 /community/contribute.html /community
 Redirect 301 /community.html /community
 Redirect 301 /our-community.html /community
 
-
-##
-
 RewriteEngine On
 RewriteBase /
 
+# Prevent directory listings (recommended)
+Options -Indexes
 
 RewriteCond %{HTTP_HOST} ^(www\.)?ignite.incubator.apache.org$
 RewriteRule ^/?(.*)$ https://ignite.apache.org/$1 [L,R=301]
@@ -187,8 +179,8 @@ RewriteRule ^releases/(1[^/]*)(/.*)?$ releases/ignite/$1$2 
[R=301,L]
 # Redirect all release URLs starting with 2.*, 3.*, 4.* ... into "igniteN" 
namespace.
 RewriteRule ^releases/([2-9][^/]*)(/.*)?$ releases/ignite$1/$1$2 [R=301,L]
 
-# docs entry points → Ignite 3 latest
-RewriteRule ^docs/?$ docs/ignite3/latest/ [R=301,L]
+# docs entry point
+RewriteRule ^docs/?$ docs/index.html [L]
 
 # special handling for /docs/latest
 RewriteRule ^docs/latest/?$ docs/ignite2/latest/ [R=301,L]
@@ -205,6 +197,20 @@ RewriteRule ^docs/ignite3/latest/(.*)$ 
docs/ignite3/3.1.0/$1 [L]
 RewriteRule ^docs/ignite3/?$ docs/ignite3/latest/ [R=301,L]
 RewriteRule ^docs/ignite3/latest$ docs/ignite3/latest/ [R=301,L]
 
+# =============================================================================
+# Ignite 3: prefer .html pages over same-name directories (NO trailing slash)
+# =============================================================================
+
+# If user hits .../page/ and page.html exists -> redirect to .../page (no 
slash)
+RewriteCond %{REQUEST_URI} ^/docs/ignite3/(.+)/$
+RewriteCond %{DOCUMENT_ROOT}/docs/ignite3/%1.html -f
+RewriteRule ^docs/ignite3/(.+)/$ /docs/ignite3/$1 [R=301,L]
+
+# If user hits .../page (no ext) and page.html exists -> serve page.html
+RewriteCond %{REQUEST_URI} ^/docs/ignite3/
+RewriteCond %{REQUEST_FILENAME}.html -f
+RewriteRule ^docs/ignite3/(.+)$ docs/ignite3/$1.html [L]
+
 # =============================================================================
 # Docusaurus clean URL handling for Ignite 3 (/docs/ignite3/)
 # Docusaurus generates static HTML in directories with index.html files
@@ -241,6 +247,4 @@ RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME}\.html -f
 RewriteRule ^docs/ignite2/(.*)$ docs/ignite2/$1.html [L,NC]
 
-
-
 ErrorDocument 404 /404.html

Reply via email to