# 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.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/9_10_0/$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

# TODO: Move the javadocs to a subfolder core/docs/ instead of directly below core/

# 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+(?!.+\.\w+$|.+/$).+$   $0/ [R=301,L]

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