# htaccess for root dir of lilypond.org
# ----------------------------------------------------
#   The file comes from git master:
#   Documentation/webserver/lilypond.org.htaccess
#
#   Please do not edit it directly (unless something
#   is critically broken); instead, change it in git
#   and then copy from there.
# ----------------------------------------------------

RewriteEngine On

# Permanent redirect from www.lilypond.org to lilypond.org
RewriteCond "%{HTTP_HOST}" "^www\.(.+)$" [NC]
RewriteRule "^/?(.*)$"     "https://%1/$1" [R=301,L,NE]

# Deny following of symlinks by robots.
# HTTrack is a known offender.
# better yet, to redirect this to page that tells adminstrator
# about brokenness
RewriteCond %{HTTP_USER_AGENT} httrack [NC]
RewriteRule ^.*/source/.*$ /please-respect-robots.txt.html [L]

# Redirect from /website to root
# We use THE_REQUEST here in order to prevent redirect loops
RewriteCond %{THE_REQUEST} /website/
RewriteRule ^website/(.*)$ /$1 [R=301,L]

# Deny rogue crawler
RewriteCond %{HTTP_USER_AGENT} ^(.*)AhrefsBot(.*) [NC]
RewriteRule .* - [F,L]

# Permanent top level entry points -- ./doc
RedirectMatch ^/music-glossary /glossary
RedirectMatch ^/tutorial /learning
RedirectMatch ^/documentation/$ /doc
# Possibly resurrect this with new web site
# This breaks the documentation index with old site
# RedirectMatch ^/documentation$ /doc
#
RedirectMatch ^/bugs	/bug-reports
# the new website already has an /authors
#RedirectMatch ^/authors /doc/Documentation/topdocs/AUTHORS
RedirectMatch ^/stable    /doc/stable
# the new website has a dedicated page for development.
#RedirectMatch ^/development    /doc/development

# Main doc URL redirects
RedirectMatch ^/doc/?$ /manuals
RedirectMatch ^/doc/stable/?$ /manuals
RedirectMatch ^/doc/development/?$ /development

# Allow to use deep links to latest stable or development docs
RedirectMatch ^/doc//*latest/*(.*)$ /doc/v2.25/$1
RedirectMatch ^/doc//*development/*(.*)$ /doc/v2.25/$1
RedirectMatch ^/doc//*stable/*(.*)$ /doc/v2.24/$1
RedirectMatch ^/doc//*([^v].*)$ /doc/v2.24/$1
RedirectMatch ^(/Documentation.*)$ /doc/v2.24$1
RedirectMatch ^/index$ /

# fix root calculation: no double slashes
# RedirectMatch ^(.*/)/+(.*)$ $1$2

###########################################

## Rewrite all non-existing files at toplevel to the /website/ dir, so our
## internal structure for rsync doesn't have to be changed.
## This works for the current/old site as well as the new one.

RewriteEngine on
RewriteBase /

SetEnvIf REQUEST_URI .* WEB=/website

# Rewrite empty to /website
RewriteCond %{REQUEST_URI} ^/*$
RewriteRule ^(/*)$ %{ENV:WEB}/ [QSA,L]

# css Request without directory part
RewriteCond %{REQUEST_URI} ^/?[^/]+[.]css$
# ...that does not match match an existing file
RewriteCond %{REQUEST_FILENAME} !-f
# ...and does not match an existing directory
RewriteCond %{REQUEST_FILENAME} !-d
# ...prefix with website
RewriteRule ^(.+)$ %{ENV:WEB}/$1 [QSA,L]

# Request without trailing slash
RewriteCond %{REQUEST_URI} !.*/$
# ...that would access a directory in /website
RewriteCond %{DOCUMENT_ROOT}%{ENV:WEB}%{REQUEST_URI} -d
# ...and does not start with /web
RewriteCond %{REQUEST_URI} !^%{ENV:WEB}
RewriteCond %{REQUEST_URI} !^/website
# ...and does not start with /doc$
RewriteCond %{REQUEST_URI} !^/doc$
# ...add trailing slash for [menu] and to avoid /web/ in browser url
RewriteRule ^(.+)$ https://%{HTTP_HOST}/$1/ [R,QSA,L]

# Request that does not start with /website
RewriteCond %{REQUEST_URI} !^/website
RewriteCond %{REQUEST_URI} !^%{ENV:WEB}
# ...and does not start with /doc/
RewriteCond %{REQUEST_URI} !^/doc/
# ...and is not /doc$
RewriteCond %{REQUEST_URI} !^/doc$
# ...and does not match match an existing file
RewriteCond %{REQUEST_FILENAME} !-f
# ...and does not match an existing directory
RewriteCond %{REQUEST_FILENAME} !-d
# ..prefix with /web
RewriteRule ^(.+)$ %{ENV:WEB}/$1 [QSA,L]

## Redirect the old web/ to the homepage
RedirectMatch 301 ^/web/.* /

###########################################

# latin1 version copied to web and doc/2.x
AddDefaultCharset utf-8
AddCharset utf-8 .html
AddCharset utf-8 .de
AddCharset utf-8 .en
AddCharset utf-8 .es
AddCharset utf-8 .fr
AddCharset utf-8 .tr
AddCharset utf-8 .txt

# Add extensions for language negotiation
# See: https://www.w3.org/International/questions/qa-apache-lang-neg
AddLanguage ca .ca
AddLanguage de .de
AddLanguage es .es
AddLanguage fr .fr
AddLanguage it .it
AddLanguage ja .ja
AddLanguage tr .tr
AddLanguage zh .zh

# Make en the default language and serve *.html as a fallback if
# *.en.html does not exist.
DefaultLanguage en

# Setup rewrites in case the user requested the file explicitly.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+).en.html $1.html [QSA,L]

DirectoryIndex index

