# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

RewriteEngine on
RewriteBase /

<If "%{HTTPS} == 'on'">
  Header always set Strict-Transport-Security "max-age=31536000"
</If>
<Else>
  RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</Else>

### Pre-CMS site redirects

# DOAP file redirects to source repository
RedirectMatch Permanent ^/core/doap.rdf https://gitbox.apache.org/repos/asf?p=lucene-solr.git;a=blob_plain;f=dev-tools/doap/lucene.rdf;hb=HEAD

# page renames
RedirectMatch Permanent ^/who.html /whoweare.html
RedirectMatch Permanent ^/java/docs/irc.html /core/discussion.html#irc
RedirectMatch Permanent ^/java/docs/mailinglists.html /core/discussion.html
RedirectMatch Permanent ^/java/docs/systemrequirements.html /core/systemreqs.html
RedirectMatch Permanent ^/java/docs/developer-resources.html /core/developer.html

# Simple redirect to "directory", so later rules match
RedirectMatch temp ^/core/api$ $0/
RedirectMatch Permanent ^/core/\d+_\d+_\d+$ $0/

# Other pages can always be redirected to the "most current" released javadocs
# using "temp" instead of permanent so crawlers know that they
# might change again in the future
RedirectMatch temp ^/core/api/(.*) /core/{{ LUCENE_LATEST_RELEASE | replace(".", "_") }}/$1

# we no longer have a TLP mail.html page use 'core' for now
RedirectMatch Permanent ^/mail.html /core/discussion.html

# this was a temporary solution:
RedirectMatch Permanent ^/core/old_versioned_docs/versions/(.*) /core/$1

# redirect older point versions to latest (to keep number of javadocs small):
RedirectMatch Permanent ^/core/2_9_[0123](.*) /core/2_9_4$1
RedirectMatch Permanent ^/core/3_0_[012](.*) /core/3_0_3$1
RedirectMatch Permanent ^/core/4_0_0-(ALPHA|BETA)(.*) /core/4_0_0$2

# Default catch for "java" - Core is the new Java!
RedirectMatch Permanent ^/java/docs(.*) /core$1
RedirectMatch Permanent ^/java($|/.*) /core$1

# pylucene docs renamed
RedirectMatch Permanent ^/pylucene/documentation/install.html /pylucene/install.html
RedirectMatch Permanent ^/pylucene/documentation/readme.html /pylucene/features.html
RedirectMatch Permanent ^/pylucene/resources/version_control.html /pylucene/mailing-lists.html

# no page for this????
RedirectMatch Permanent ^/pylucene/resources/version_control.html /pylucene/

# when in doubt, assume they've moved up a dir
RedirectMatch Permanent ^/pylucene/documentation/(.*) /pylucene/$1
RedirectMatch Permanent ^/pylucene/jcc/documentation/(.*) /pylucene/jcc/$1

### old subprojects

# old nutch redirects
Redirect Permanent ^/nutch/docs/en/bot.html https://lucene.apache.org/nutch/bot.html

# hadoop graduated to TLP, site strcuture has changed, do don't use $1 in redirect...
RedirectMatch Permanent ^/hadoop(.*)$ https://hadoop.apache.org/

#mahout is TLP
RedirectMatch Permanent ^/mahout(.*)$ https://mahout.apache.org/$1

# promote Tika to TLP
RedirectMatch Permanent ^/tika/(.*)$ https://tika.apache.org/$1

# promote Nutch to TLP
RedirectMatch Permanent ^/nutch/(.*)$ https://nutch.apache.org/$1

# Lucy has moved, site strcuture has changed, do don't use $1 in redirect...
RedirectMatch Permanent ^/lucy/(.*)$ https://lucy.apache.org/

# Solr moved to TLP Feb 2021
Redirect Permanent /feeds/solr https://solr.apache.org/feeds/solr
Redirect permanent /solr https://solr.apache.org

### Javadocs

# Hack: Append slash, if folder name does not end with slash - everything containing a "." is treated as file and excluded from redirect:
RewriteRule ^core/\d+_\d+_\d+/(?!.+\.\w+$|.+/$).+$   $0/ [R=301,L]

# __root/docs.lucene.apache.org/content/ is a special alias added by INFRA-19439, so we can refer to stuff in other places like SVN:
RewriteRule ^core/\d+_\d+_\d+/.*$         __root/docs.lucene.apache.org/content/$0 [PT]

