This is an automated email from the ASF dual-hosted git repository. djencks pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-website.git
commit 809e1db85f4461f6e02e3ffee7262bc6285406e9 Author: David Jencks <djen...@apache.org> AuthorDate: Sat Nov 13 18:29:22 2021 -0800 Assemble the final .htaccess file from a static file, the Antora generated .htaccess file, and transformations of generated 302 rules --- antora-playbook.yml | 8 +- gulpfile.js | 39 +++++++++ local-httpd-in-docker.sh | 9 ++ package.json | 4 +- static/.htaccess | 208 +---------------------------------------------- tests/redirect.sh | 97 +++++++++++++--------- 6 files changed, 115 insertions(+), 250 deletions(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 41b475b..786b589 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -1,7 +1,7 @@ site: title: Apache Camel url: https://camel.apache.org - start_page: _@manual::index.adoc +# start_page: _@manual::index.adoc content: sources: @@ -97,9 +97,9 @@ ui: url: ./antora-ui-camel/build/ui-bundle.zip urls: - redirect_facility: disabled -# latest_version_segment_strategy: redirect:from -# latest_version_segment: latest + redirect_facility: httpd + latest_version_segment_strategy: redirect:from + latest_version_segment: latest output: diff --git a/gulpfile.js b/gulpfile.js index 97712f2..881724e 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -2,6 +2,7 @@ const cheerio = require('gulp-cheerio'); const env = process.env.CAMEL_ENV || 'development'; const gulp = require('gulp'); const htmlmin = require('gulp-htmlmin'); +const inject = require('gulp-inject') /** * We minify all HTML files using htmlmin, this is to make them smaller in size @@ -53,6 +54,44 @@ gulp.task('sitemap', (done) => { .pipe(gulp.dest('public')); }); +gulp.task('htaccess', (done) => { + return gulp.src(`static/.htaccess`) + .pipe( + inject( + gulp.src('documentation/.htaccess'), + { + starttag:'<!-- inject:htaccess -->', + removeTags: true, + transform: (filename, file) => { + return versionlessRedirects(file.contents.toString('utf8')) + }, + } + ) + ) + .pipe(gulp.dest('public')) +}); + +const REDIRECT_RX = /^Redirect 302 \/(?<component>c.*)\/latest \/\k<component>\/(?<version>.*)$/ + +function versionlessRedirects (text) { + const lines = text.split('\n') + const processed = lines.reduce((accum, line) => { + accum.push(line) + const m = line.match(REDIRECT_RX) + if (m) { + accum.push(`RedirectMatch 302 "^/${m.groups.component}(/?)$" "/${m.groups.component}/${m.groups.version}/"`) + // The first line redirects **/next to **/next/ so the second line does not match. + // Apparently it needs to be a match or it will transform **/next/ to **/next// + accum.push(`RedirectMatch 301 "^/${m.groups.component}/next$" "/${m.groups.component}/next/"`) + accum.push(`RedirectMatch 302 "^/${m.groups.component}/(?![0-9].*|next/)(.+)$" "/${m.groups.component}/${m.groups.version}/$1"`) + // As an alternative, the following line works as long as no file names start with 'next' + // accum.push(`RedirectMatch 302 "^/${m.groups.component}/(?![0-9].*|next)(.+)$" "/${m.groups.component}/${m.groups.version}/$1"`) + } + return accum + }, []) + return processed.join('\n') +} + /* * Removes the content from the `public` directory. */ diff --git a/local-httpd-in-docker.sh b/local-httpd-in-docker.sh new file mode 100755 index 0000000..596ada5 --- /dev/null +++ b/local-httpd-in-docker.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +# Run httpd in docker + +#docker build -t camel-website . +docker run --rm -p 80:80 -p 443:443 \ + -v "$PWD/public":/usr/local/apache2/htdocs/:Z \ + -v "$PWD/support/http":/support:Z \ + httpd:2.4 /bin/bash -c "cp /support/* /usr/local/apache2/conf/ && httpd-foreground" \ No newline at end of file diff --git a/package.json b/package.json index 8229bf7..9d4cfbd 100644 --- a/package.json +++ b/package.json @@ -3,12 +3,13 @@ "version": "1.0.0-SNAPSHOT", "license": "Apache-2.0", "scripts": { - "build": "run-s build:antora build:hugo build:sitemap build:minify", + "build": "run-s build:antora build:hugo build:sitemap build:htaccess build:minify", "build-all": "yarn workspaces foreach --topological-dev run build", "build:antora": "antora --clean --fetch antora-playbook.yml --stacktrace", "build:hugo": "hugo --cacheDir ${HUGO_CACHE_DIR:-$(pwd)/.hugo_data} ${HUGO_OPTIONS:-}", "build:minify": "gulp minify", "build:sitemap": "gulp sitemap", + "build:htaccess": "gulp htaccess", "check:html": "html-validate public", "check:links": "deadlinks-linux public", "checks": "run-s check:links check:html", @@ -38,6 +39,7 @@ "gulp": "~4.0", "gulp-cheerio": "~1.0", "gulp-htmlmin": "~5.0", + "gulp-inject": "^5.0.2", "html-validate": "~4", "hugo-extended": "^0.84.3", "netlify-cli": "^6.14.10", diff --git a/static/.htaccess b/static/.htaccess index 2165b7d..dd65921 100644 --- a/static/.htaccess +++ b/static/.htaccess @@ -548,187 +548,6 @@ Redirect 301 /camel-embedded-maven-goal.html /manual/camel-embedded-maven-goal.h Redirect 301 /camel-jar-dependencies.html /manual/camel-jar-dependencies.html Redirect 301 /camel-maven-archetypes.html /manual/camel-maven-archetypes.html Redirect 301 /camel-maven-plugin.html /manual/camel-maven-plugin.html -# camel-quarkus start: copied from camel-quarkus/docs/target/site/.htaccess built locally -Redirect 301 /camel-quarkus/latest/list-of-camel-quarkus-extensions.html /camel-quarkus/next/reference/index.html -Redirect 301 /camel-quarkus/latest/reference/extensions/index.html /camel-quarkus/next/reference/index.html -Redirect 301 /camel-quarkus/latest/cdi.html /camel-quarkus/next/user-guide/cdi.html -Redirect 301 /camel-quarkus/latest/examples.html /camel-quarkus/next/user-guide/examples.html -Redirect 301 /camel-quarkus/latest/first-steps.html /camel-quarkus/next/user-guide/first-steps.html -Redirect 301 /camel-quarkus/latest/user-guide.html /camel-quarkus/next/user-guide/index.html -Redirect 301 /camel-quarkus/latest/native-mode.html /camel-quarkus/next/user-guide/native-mode.html -Redirect 301 /camel-quarkus/latest/ci.html /camel-quarkus/next/contributor-guide/ci.html -Redirect 301 /camel-quarkus/latest/create-new-extension.html /camel-quarkus/next/contributor-guide/create-new-extension.html -Redirect 301 /camel-quarkus/latest/extension-documentation.html /camel-quarkus/next/contributor-guide/extension-documentation.html -Redirect 301 /camel-quarkus/latest/extension-metadata.html /camel-quarkus/next/contributor-guide/extension-metadata.html -Redirect 301 /camel-quarkus/latest/contributor-guide.html /camel-quarkus/next/contributor-guide/index.html -Redirect 301 /camel-quarkus/latest/promote-jvm-to-native.html /camel-quarkus/next/contributor-guide/promote-jvm-to-native.html -Redirect 301 /camel-quarkus/latest/release-guide.html /camel-quarkus/next/contributor-guide/release-guide.html -Redirect 301 /camel-quarkus/latest/extensions/activemq.html /camel-quarkus/next/reference/extensions/activemq.html -Redirect 301 /camel-quarkus/latest/extensions/ahc-ws.html /camel-quarkus/next/reference/extensions/ahc-ws.html -Redirect 301 /camel-quarkus/latest/extensions/ahc.html /camel-quarkus/next/reference/extensions/ahc.html -Redirect 301 /camel-quarkus/latest/extensions/amqp.html /camel-quarkus/next/reference/extensions/amqp.html -Redirect 301 /camel-quarkus/latest/extensions/attachments.html /camel-quarkus/next/reference/extensions/attachments.html -Redirect 301 /camel-quarkus/latest/extensions/avro-rpc.html /camel-quarkus/next/reference/extensions/avro-rpc.html -Redirect 301 /camel-quarkus/latest/extensions/avro.html /camel-quarkus/next/reference/extensions/avro.html -Redirect 301 /camel-quarkus/latest/extensions/aws-ec2.html /camel-quarkus/next/reference/extensions/aws-ec2.html -Redirect 301 /camel-quarkus/latest/extensions/aws-ecs.html /camel-quarkus/next/reference/extensions/aws-ecs.html -Redirect 301 /camel-quarkus/latest/extensions/aws-eks.html /camel-quarkus/next/reference/extensions/aws-eks.html -Redirect 301 /camel-quarkus/latest/extensions/aws-iam.html /camel-quarkus/next/reference/extensions/aws-iam.html -Redirect 301 /camel-quarkus/latest/extensions/aws-kinesis.html /camel-quarkus/next/reference/extensions/aws-kinesis.html -Redirect 301 /camel-quarkus/latest/extensions/aws-kms.html /camel-quarkus/next/reference/extensions/aws-kms.html -Redirect 301 /camel-quarkus/latest/extensions/aws-lambda.html /camel-quarkus/next/reference/extensions/aws-lambda.html -Redirect 301 /camel-quarkus/latest/extensions/aws-s3.html /camel-quarkus/next/reference/extensions/aws-s3.html -Redirect 301 /camel-quarkus/latest/extensions/aws-sdb.html /camel-quarkus/next/reference/extensions/aws-sdb.html -Redirect 301 /camel-quarkus/latest/extensions/aws-sns.html /camel-quarkus/next/reference/extensions/aws-sns.html -Redirect 301 /camel-quarkus/latest/extensions/aws-sqs.html /camel-quarkus/next/reference/extensions/aws-sqs.html -Redirect 301 /camel-quarkus/latest/extensions/aws-swf.html /camel-quarkus/next/reference/extensions/aws-swf.html -Redirect 301 /camel-quarkus/latest/extensions/aws-translate.html /camel-quarkus/next/reference/extensions/aws-translate.html -Redirect 301 /camel-quarkus/latest/extensions/aws2-athena.html /camel-quarkus/next/reference/extensions/aws2-athena.html -Redirect 301 /camel-quarkus/latest/extensions/aws2-cw.html /camel-quarkus/next/reference/extensions/aws2-cw.html -Redirect 301 /camel-quarkus/latest/extensions/aws2-ddb.html /camel-quarkus/next/reference/extensions/aws2-ddb.html -Redirect 301 /camel-quarkus/latest/extensions/aws2-ec2.html /camel-quarkus/next/reference/extensions/aws2-ec2.html -Redirect 301 /camel-quarkus/latest/extensions/aws2-ecs.html /camel-quarkus/next/reference/extensions/aws2-ecs.html -Redirect 301 /camel-quarkus/latest/extensions/aws2-eks.html /camel-quarkus/next/reference/extensions/aws2-eks.html -Redirect 301 /camel-quarkus/latest/extensions/aws2-iam.html /camel-quarkus/next/reference/extensions/aws2-iam.html -Redirect 301 /camel-quarkus/latest/extensions/aws2-kms.html /camel-quarkus/next/reference/extensions/aws2-kms.html -Redirect 301 /camel-quarkus/latest/extensions/aws2-mq.html /camel-quarkus/next/reference/extensions/aws2-mq.html -Redirect 301 /camel-quarkus/latest/extensions/aws2-msk.html /camel-quarkus/next/reference/extensions/aws2-msk.html -Redirect 301 /camel-quarkus/latest/extensions/aws2-s3.html /camel-quarkus/next/reference/extensions/aws2-s3.html -Redirect 301 /camel-quarkus/latest/extensions/aws2-ses.html /camel-quarkus/next/reference/extensions/aws2-ses.html -Redirect 301 /camel-quarkus/latest/extensions/aws2-sns.html /camel-quarkus/next/reference/extensions/aws2-sns.html -Redirect 301 /camel-quarkus/latest/extensions/aws2-sqs.html /camel-quarkus/next/reference/extensions/aws2-sqs.html -Redirect 301 /camel-quarkus/latest/extensions/aws2-translate.html /camel-quarkus/next/reference/extensions/aws2-translate.html -Redirect 301 /camel-quarkus/latest/extensions/azure.html /camel-quarkus/next/reference/extensions/azure.html -Redirect 301 /camel-quarkus/latest/extensions/base64.html /camel-quarkus/next/reference/extensions/base64.html -Redirect 301 /camel-quarkus/latest/extensions/bean-validator.html /camel-quarkus/next/reference/extensions/bean-validator.html -Redirect 301 /camel-quarkus/latest/extensions/bean.html /camel-quarkus/next/reference/extensions/bean.html -Redirect 301 /camel-quarkus/latest/extensions/bindy.html /camel-quarkus/next/reference/extensions/bindy.html -Redirect 301 /camel-quarkus/latest/extensions/box.html /camel-quarkus/next/reference/extensions/box.html -Redirect 301 /camel-quarkus/latest/extensions/braintree.html /camel-quarkus/next/reference/extensions/braintree.html -Redirect 301 /camel-quarkus/latest/extensions/caffeine-lrucache.html /camel-quarkus/next/reference/extensions/caffeine-lrucache.html -Redirect 301 /camel-quarkus/latest/extensions/cassandraql.html /camel-quarkus/next/reference/extensions/cassandraql.html -Redirect 301 /camel-quarkus/latest/extensions/componentdsl.html /camel-quarkus/next/reference/extensions/componentdsl.html -Redirect 301 /camel-quarkus/latest/extensions/consul.html /camel-quarkus/next/reference/extensions/consul.html -Redirect 301 /camel-quarkus/latest/extensions/controlbus.html /camel-quarkus/next/reference/extensions/controlbus.html -Redirect 301 /camel-quarkus/latest/extensions/core-cloud.html /camel-quarkus/next/reference/extensions/core-cloud.html -Redirect 301 /camel-quarkus/latest/extensions/core.html /camel-quarkus/next/reference/extensions/core.html -Redirect 301 /camel-quarkus/latest/extensions/couchbase.html /camel-quarkus/next/reference/extensions/couchbase.html -Redirect 301 /camel-quarkus/latest/extensions/couchdb.html /camel-quarkus/next/reference/extensions/couchdb.html -Redirect 301 /camel-quarkus/latest/extensions/cron.html /camel-quarkus/next/reference/extensions/cron.html -Redirect 301 /camel-quarkus/latest/extensions/csv.html /camel-quarkus/next/reference/extensions/csv.html -Redirect 301 /camel-quarkus/latest/extensions/dataformat.html /camel-quarkus/next/reference/extensions/dataformat.html -Redirect 301 /camel-quarkus/latest/extensions/debezium-mongodb.html /camel-quarkus/next/reference/extensions/debezium-mongodb.html -Redirect 301 /camel-quarkus/latest/extensions/debezium-mysql.html /camel-quarkus/next/reference/extensions/debezium-mysql.html -Redirect 301 /camel-quarkus/latest/extensions/debezium-postgres.html /camel-quarkus/next/reference/extensions/debezium-postgres.html -Redirect 301 /camel-quarkus/latest/extensions/debezium-sqlserver.html /camel-quarkus/next/reference/extensions/debezium-sqlserver.html -Redirect 301 /camel-quarkus/latest/extensions/direct.html /camel-quarkus/next/reference/extensions/direct.html -Redirect 301 /camel-quarkus/latest/extensions/dozer.html /camel-quarkus/next/reference/extensions/dozer.html -Redirect 301 /camel-quarkus/latest/extensions/elasticsearch-rest.html /camel-quarkus/next/reference/extensions/elasticsearch-rest.html -Redirect 301 /camel-quarkus/latest/extensions/endpointdsl.html /camel-quarkus/next/reference/extensions/endpointdsl.html -Redirect 301 /camel-quarkus/latest/extensions/exec.html /camel-quarkus/next/reference/extensions/exec.html -Redirect 301 /camel-quarkus/latest/extensions/fhir.html /camel-quarkus/next/reference/extensions/fhir.html -Redirect 301 /camel-quarkus/latest/extensions/file-watch.html /camel-quarkus/next/reference/extensions/file-watch.html -Redirect 301 /camel-quarkus/latest/extensions/file.html /camel-quarkus/next/reference/extensions/file.html -Redirect 301 /camel-quarkus/latest/extensions/ftp.html /camel-quarkus/next/reference/extensions/ftp.html -Redirect 301 /camel-quarkus/latest/extensions/github.html /camel-quarkus/next/reference/extensions/github.html -Redirect 301 /camel-quarkus/latest/extensions/google-bigquery.html /camel-quarkus/next/reference/extensions/google-bigquery.html -Redirect 301 /camel-quarkus/latest/extensions/google-calendar.html /camel-quarkus/next/reference/extensions/google-calendar.html -Redirect 301 /camel-quarkus/latest/extensions/google-drive.html /camel-quarkus/next/reference/extensions/google-drive.html -Redirect 301 /camel-quarkus/latest/extensions/google-mail.html /camel-quarkus/next/reference/extensions/google-mail.html -Redirect 301 /camel-quarkus/latest/extensions/google-pubsub.html /camel-quarkus/next/reference/extensions/google-pubsub.html -Redirect 301 /camel-quarkus/latest/extensions/google-sheets.html /camel-quarkus/next/reference/extensions/google-sheets.html -Redirect 301 /camel-quarkus/latest/extensions/graphql.html /camel-quarkus/next/reference/extensions/graphql.html -Redirect 301 /camel-quarkus/latest/extensions/grok.html /camel-quarkus/next/reference/extensions/grok.html -Redirect 301 /camel-quarkus/latest/extensions/groovy.html /camel-quarkus/next/reference/extensions/groovy.html -Redirect 301 /camel-quarkus/latest/extensions/grpc.html /camel-quarkus/next/reference/extensions/grpc.html -Redirect 301 /camel-quarkus/latest/extensions/gson.html /camel-quarkus/next/reference/extensions/gson.html -Redirect 301 /camel-quarkus/latest/extensions/http.html /camel-quarkus/next/reference/extensions/http.html -Redirect 301 /camel-quarkus/latest/extensions/hystrix.html /camel-quarkus/next/reference/extensions/hystrix.html -Redirect 301 /camel-quarkus/latest/extensions/ical.html /camel-quarkus/next/reference/extensions/ical.html -Redirect 301 /camel-quarkus/latest/extensions/infinispan.html /camel-quarkus/next/reference/extensions/infinispan.html -Redirect 301 /camel-quarkus/latest/extensions/influxdb.html /camel-quarkus/next/reference/extensions/influxdb.html -Redirect 301 /camel-quarkus/latest/extensions/jackson.html /camel-quarkus/next/reference/extensions/jackson.html -Redirect 301 /camel-quarkus/latest/extensions/jacksonxml.html /camel-quarkus/next/reference/extensions/jacksonxml.html -Redirect 301 /camel-quarkus/latest/extensions/jaxb.html /camel-quarkus/next/reference/extensions/jaxb.html -Redirect 301 /camel-quarkus/latest/extensions/jdbc.html /camel-quarkus/next/reference/extensions/jdbc.html -Redirect 301 /camel-quarkus/latest/extensions/jira.html /camel-quarkus/next/reference/extensions/jira.html -Redirect 301 /camel-quarkus/latest/extensions/jms.html /camel-quarkus/next/reference/extensions/jms.html -Redirect 301 /camel-quarkus/latest/extensions/johnzon.html /camel-quarkus/next/reference/extensions/johnzon.html -Redirect 301 /camel-quarkus/latest/extensions/jolt.html /camel-quarkus/next/reference/extensions/jolt.html -Redirect 301 /camel-quarkus/latest/extensions/jpa.html /camel-quarkus/next/reference/extensions/jpa.html -Redirect 301 /camel-quarkus/latest/extensions/json-validator.html /camel-quarkus/next/reference/extensions/json-validator.html -Redirect 301 /camel-quarkus/latest/extensions/jsonpath.html /camel-quarkus/next/reference/extensions/jsonpath.html -Redirect 301 /camel-quarkus/latest/extensions/jta.html /camel-quarkus/next/reference/extensions/jta.html -Redirect 301 /camel-quarkus/latest/extensions/kafka.html /camel-quarkus/next/reference/extensions/kafka.html -Redirect 301 /camel-quarkus/latest/extensions/kotlin.html /camel-quarkus/next/reference/extensions/kotlin.html -Redirect 301 /camel-quarkus/latest/extensions/kubernetes.html /camel-quarkus/next/reference/extensions/kubernetes.html -Redirect 301 /camel-quarkus/latest/extensions/kudu.html /camel-quarkus/next/reference/extensions/kudu.html -Redirect 301 /camel-quarkus/latest/extensions/log.html /camel-quarkus/next/reference/extensions/log.html -Redirect 301 /camel-quarkus/latest/extensions/lzf.html /camel-quarkus/next/reference/extensions/lzf.html -Redirect 301 /camel-quarkus/latest/extensions/mail.html /camel-quarkus/next/reference/extensions/mail.html -Redirect 301 /camel-quarkus/latest/extensions/main.html /camel-quarkus/next/reference/extensions/main.html -Redirect 301 /camel-quarkus/latest/extensions/master.html /camel-quarkus/next/reference/extensions/master.html -Redirect 301 /camel-quarkus/latest/extensions/microprofile-fault-tolerance.html /camel-quarkus/next/reference/extensions/microprofile-fault-tolerance.html -Redirect 301 /camel-quarkus/latest/extensions/microprofile-health.html /camel-quarkus/next/reference/extensions/microprofile-health.html -Redirect 301 /camel-quarkus/latest/extensions/microprofile-metrics.html /camel-quarkus/next/reference/extensions/microprofile-metrics.html -Redirect 301 /camel-quarkus/latest/extensions/mock.html /camel-quarkus/next/reference/extensions/mock.html -Redirect 301 /camel-quarkus/latest/extensions/mongodb-gridfs.html /camel-quarkus/next/reference/extensions/mongodb-gridfs.html -Redirect 301 /camel-quarkus/latest/extensions/mongodb.html /camel-quarkus/next/reference/extensions/mongodb.html -Redirect 301 /camel-quarkus/latest/extensions/mustache.html /camel-quarkus/next/reference/extensions/mustache.html -Redirect 301 /camel-quarkus/latest/extensions/netty-http.html /camel-quarkus/next/reference/extensions/netty-http.html -Redirect 301 /camel-quarkus/latest/extensions/netty.html /camel-quarkus/next/reference/extensions/netty.html -Redirect 301 /camel-quarkus/latest/extensions/nitrite.html /camel-quarkus/next/reference/extensions/nitrite.html -Redirect 301 /camel-quarkus/latest/extensions/ognl.html /camel-quarkus/next/reference/extensions/ognl.html -Redirect 301 /camel-quarkus/latest/extensions/olingo4.html /camel-quarkus/next/reference/extensions/olingo4.html -Redirect 301 /camel-quarkus/latest/extensions/openapi-java.html /camel-quarkus/next/reference/extensions/openapi-java.html -Redirect 301 /camel-quarkus/latest/extensions/openstack.html /camel-quarkus/next/reference/extensions/openstack.html -Redirect 301 /camel-quarkus/latest/extensions/opentracing.html /camel-quarkus/next/reference/extensions/opentracing.html -Redirect 301 /camel-quarkus/latest/extensions/paho.html /camel-quarkus/next/reference/extensions/paho.html -Redirect 301 /camel-quarkus/latest/extensions/pdf.html /camel-quarkus/next/reference/extensions/pdf.html -Redirect 301 /camel-quarkus/latest/extensions/platform-http.html /camel-quarkus/next/reference/extensions/platform-http.html -Redirect 301 /camel-quarkus/latest/extensions/protobuf.html /camel-quarkus/next/reference/extensions/protobuf.html -Redirect 301 /camel-quarkus/latest/extensions/pubnub.html /camel-quarkus/next/reference/extensions/pubnub.html -Redirect 301 /camel-quarkus/latest/extensions/quartz.html /camel-quarkus/next/reference/extensions/quartz.html -Redirect 301 /camel-quarkus/latest/extensions/qute.html /camel-quarkus/next/reference/extensions/qute.html -Redirect 301 /camel-quarkus/latest/extensions/rabbitmq.html /camel-quarkus/next/reference/extensions/rabbitmq.html -Redirect 301 /camel-quarkus/latest/extensions/reactive-executor.html /camel-quarkus/next/reference/extensions/reactive-executor.html -Redirect 301 /camel-quarkus/latest/extensions/reactive-streams.html /camel-quarkus/next/reference/extensions/reactive-streams.html -Redirect 301 /camel-quarkus/latest/extensions/ref.html /camel-quarkus/next/reference/extensions/ref.html -Redirect 301 /camel-quarkus/latest/extensions/rest-openapi.html /camel-quarkus/next/reference/extensions/rest-openapi.html -Redirect 301 /camel-quarkus/latest/extensions/rest.html /camel-quarkus/next/reference/extensions/rest.html -Redirect 301 /camel-quarkus/latest/extensions/salesforce.html /camel-quarkus/next/reference/extensions/salesforce.html -Redirect 301 /camel-quarkus/latest/extensions/sap-netweaver.html /camel-quarkus/next/reference/extensions/sap-netweaver.html -Redirect 301 /camel-quarkus/latest/extensions/scheduler.html /camel-quarkus/next/reference/extensions/scheduler.html -Redirect 301 /camel-quarkus/latest/extensions/seda.html /camel-quarkus/next/reference/extensions/seda.html -Redirect 301 /camel-quarkus/latest/extensions/servicenow.html /camel-quarkus/next/reference/extensions/servicenow.html -Redirect 301 /camel-quarkus/latest/extensions/servlet.html /camel-quarkus/next/reference/extensions/servlet.html -Redirect 301 /camel-quarkus/latest/extensions/sjms.html /camel-quarkus/next/reference/extensions/sjms.html -Redirect 301 /camel-quarkus/latest/extensions/sjms2.html /camel-quarkus/next/reference/extensions/sjms2.html -Redirect 301 /camel-quarkus/latest/extensions/slack.html /camel-quarkus/next/reference/extensions/slack.html -Redirect 301 /camel-quarkus/latest/extensions/smallrye-reactive-messaging.html /camel-quarkus/next/reference/extensions/smallrye-reactive-messaging.html -Redirect 301 /camel-quarkus/latest/extensions/snakeyaml.html /camel-quarkus/next/reference/extensions/snakeyaml.html -Redirect 301 /camel-quarkus/latest/extensions/soap.html /camel-quarkus/next/reference/extensions/soap.html -Redirect 301 /camel-quarkus/latest/extensions/sql.html /camel-quarkus/next/reference/extensions/sql.html -Redirect 301 /camel-quarkus/latest/extensions/stream.html /camel-quarkus/next/reference/extensions/stream.html -Redirect 301 /camel-quarkus/latest/extensions/tagsoup.html /camel-quarkus/next/reference/extensions/tagsoup.html -Redirect 301 /camel-quarkus/latest/extensions/tarfile.html /camel-quarkus/next/reference/extensions/tarfile.html -Redirect 301 /camel-quarkus/latest/extensions/telegram.html /camel-quarkus/next/reference/extensions/telegram.html -Redirect 301 /camel-quarkus/latest/extensions/tika.html /camel-quarkus/next/reference/extensions/tika.html -Redirect 301 /camel-quarkus/latest/extensions/timer.html /camel-quarkus/next/reference/extensions/timer.html -Redirect 301 /camel-quarkus/latest/extensions/twitter.html /camel-quarkus/next/reference/extensions/twitter.html -Redirect 301 /camel-quarkus/latest/extensions/validator.html /camel-quarkus/next/reference/extensions/validator.html -Redirect 301 /camel-quarkus/latest/extensions/vertx.html /camel-quarkus/next/reference/extensions/vertx.html -Redirect 301 /camel-quarkus/latest/extensions/vm.html /camel-quarkus/next/reference/extensions/vm.html -Redirect 301 /camel-quarkus/latest/extensions/websocket-jsr356.html /camel-quarkus/next/reference/extensions/websocket-jsr356.html -Redirect 301 /camel-quarkus/latest/extensions/xml-io.html /camel-quarkus/next/reference/extensions/xml-io.html -Redirect 301 /camel-quarkus/latest/extensions/xml-jaxb.html /camel-quarkus/next/reference/extensions/xml-jaxb.html -Redirect 301 /camel-quarkus/latest/extensions/xml-jaxp.html /camel-quarkus/next/reference/extensions/xml-jaxp.html -Redirect 301 /camel-quarkus/latest/extensions/xpath.html /camel-quarkus/next/reference/extensions/xpath.html -Redirect 301 /camel-quarkus/latest/extensions/xslt.html /camel-quarkus/next/reference/extensions/xslt.html -Redirect 301 /camel-quarkus/latest/extensions/xstream.html /camel-quarkus/next/reference/extensions/xstream.html -Redirect 301 /camel-quarkus/latest/extensions/zip-deflater.html /camel-quarkus/next/reference/extensions/zip-deflater.html -Redirect 301 /camel-quarkus/latest/extensions/zipfile.html /camel-quarkus/next/reference/extensions/zipfile.html -# camel-quarkus end # camel-kafka-connect start Redirect 301 /camel-kafka-connector/latest/connectors.html /camel-kafka-connector/latest/reference/index.html # camel-kafka-connect end @@ -1283,31 +1102,8 @@ Redirect 301 /blog/release-3-4-4.html /blog/2020/09/RELEASE-3.4.4/ Redirect 301 /blog/release-3-5-0.html /blog/2020/09/RELEASE-3.5.0/ Redirect 301 /blog/release-3-6-0.html /blog/2020/09/RELEASE-3.6.0/ -# if the request can serve the file, serve it don't evaluate rules below -RewriteCond %{REQUEST_FILENAME} !-f - -# request for `/<Antora component>` with either `/latest` or not `/next`, -# eating up the next `/` if it exists and capturing everything after that -# get redirected to `/<Antora component>/next/<what was captured>` -# NOTES: -# * no / at the beginning in the rule, i.e. starts with `^(components...` -# as `RewriteBase` is set to `/`, so no slash prefix here -# * first group captures the current component name -# * next group eats `/latest` or doesn't match `/next` but consumes both -# the negative match against `/next` is to prevent redirect loops for -# urls with `/next` in them (e.g. `/<Antora component/next/...`) -# * optionaly matching `/` consumes the `/` if it's there so we can -# add the `/` so `/components/next` becomes `/components/next/` but -# `/components/next/` doesn't become `/components/next//` -# * we need to be careful with Antora componets with the same prefixes -# e.g. camel-k, camel-karaf and camel-kafka-connector, so we don't match -# partialy and capture the rest of the Antora component name in subsequent -# groups, that's why we have the negative lookahead in the camel-k option -RewriteRule ^(components|camel-spring-boot|(?:camel-k(?!afka-connector|araf|amelets)|camel-kafka-connector|camel-karaf|camel-kamelets)|camel-quarkus)(?|(/latest)|(?!/next))/?(.*)$ /$1/next/$3 [R=permanent,L] - -# manual is now unversioned -Redirect 301 /manual/latest/ /manual/ -Redirect 301 /manual/latest /manual/ +<!-- inject:htaccess --> +<!-- endinject --> # Disable the pattern matching based on filenames. # diff --git a/tests/redirect.sh b/tests/redirect.sh index da3ba19..49e8124 100755 --- a/tests/redirect.sh +++ b/tests/redirect.sh @@ -1,4 +1,4 @@ -#!/bin/env bash +#!/bin/sh BASE_URL="${1:-https://localhost}" @@ -16,72 +16,91 @@ function test { fi } -test $BASE_URL/components 301 $BASE_URL/components/next/ -test $BASE_URL/components/ 301 $BASE_URL/components/next/ +C_V="3.13.x" +CK_V="1.6.x" +CKC_V="0.11.0" +CQ_V="2.4.x" + +test $BASE_URL/components 302 $BASE_URL/components/${C_V}/ +test $BASE_URL/components/ 302 $BASE_URL/components/${C_V}/ test $BASE_URL/components/next 301 $BASE_URL/components/next/ test $BASE_URL/components/next/ 200 -test $BASE_URL/components/latest 301 $BASE_URL/components/next/ -test $BASE_URL/components/latest/ 301 $BASE_URL/components/next/ -test $BASE_URL/components/latest/activemq-component.html 301 $BASE_URL/components/next/activemq-component.html +test $BASE_URL/components/latest 302 $BASE_URL/components/${C_V} +test $BASE_URL/components/latest/ 302 $BASE_URL/components/${C_V}/ +test $BASE_URL/components/activemq-component.html 302 $BASE_URL/components/${C_V}/activemq-component.html +test $BASE_URL/components/latest/activemq-component.html 302 $BASE_URL/components/${C_V}/activemq-component.html +test $BASE_URL/components/${C_V}/activemq-component.html 200 test $BASE_URL/components/next/activemq-component.html 200 -test $BASE_URL/camel-spring-boot 301 $BASE_URL/camel-spring-boot/next/ -test $BASE_URL/camel-spring-boot/ 301 $BASE_URL/camel-spring-boot/next/ +test $BASE_URL/camel-spring-boot 302 $BASE_URL/camel-spring-boot/${C_V}/ +test $BASE_URL/camel-spring-boot/ 302 $BASE_URL/camel-spring-boot/${C_V}/ test $BASE_URL/camel-spring-boot/next 301 $BASE_URL/camel-spring-boot/next/ test $BASE_URL/camel-spring-boot/next/ 200 -test $BASE_URL/camel-spring-boot/latest 301 $BASE_URL/camel-spring-boot/next/ -test $BASE_URL/camel-spring-boot/latest/ 301 $BASE_URL/camel-spring-boot/next/ -test $BASE_URL/camel-spring-boot/latest/list.html 301 $BASE_URL/camel-spring-boot/next/list.html +test $BASE_URL/camel-spring-boot/latest 302 $BASE_URL/camel-spring-boot/${C_V} +test $BASE_URL/camel-spring-boot/latest/ 302 $BASE_URL/camel-spring-boot/${C_V}/ +test $BASE_URL/camel-spring-boot/list.html 302 $BASE_URL/camel-spring-boot/${C_V}/list.html +test $BASE_URL/camel-spring-boot/latest/list.html 302 $BASE_URL/camel-spring-boot/${C_V}/list.html +test $BASE_URL/camel-spring-boot/${C_V}/list.html 200 test $BASE_URL/camel-spring-boot/next/list.html 200 -test $BASE_URL/camel-k 301 $BASE_URL/camel-k/next/ -test $BASE_URL/camel-k/ 301 $BASE_URL/camel-k/next/ +test $BASE_URL/camel-k 302 $BASE_URL/camel-k/${CK_V}/ +test $BASE_URL/camel-k/ 302 $BASE_URL/camel-k/${CK_V}/ test $BASE_URL/camel-k/next 301 $BASE_URL/camel-k/next/ test $BASE_URL/camel-k/next/ 200 -test $BASE_URL/camel-k/latest 301 $BASE_URL/camel-k/next/ -test $BASE_URL/camel-k/latest/ 301 $BASE_URL/camel-k/next/ -test $BASE_URL/camel-k/latest/traits/master.html 301 $BASE_URL/camel-k/next/traits/master.html +test $BASE_URL/camel-k/latest 302 $BASE_URL/camel-k/${CK_V} +test $BASE_URL/camel-k/latest/ 302 $BASE_URL/camel-k/${CK_V}/ +test $BASE_URL/camel-k/traits/master.html 302 $BASE_URL/camel-k/${CK_V}/traits/master.html +test $BASE_URL/camel-k/latest/traits/master.html 302 $BASE_URL/camel-k/${CK_V}/traits/master.html +test $BASE_URL/camel-k/${CK_V}/traits/master.html 200 test $BASE_URL/camel-k/next/traits/master.html 200 -test $BASE_URL/camel-karaf 301 $BASE_URL/camel-karaf/next/ -test $BASE_URL/camel-karaf/ 301 $BASE_URL/camel-karaf/next/ +test $BASE_URL/camel-karaf 302 $BASE_URL/camel-karaf/${C_V}/ +test $BASE_URL/camel-karaf/ 302 $BASE_URL/camel-karaf/${C_V}/ test $BASE_URL/camel-karaf/next 301 $BASE_URL/camel-karaf/next/ test $BASE_URL/camel-karaf/next/ 200 -test $BASE_URL/camel-karaf/latest 301 $BASE_URL/camel-karaf/next/ -test $BASE_URL/camel-karaf/latest/ 301 $BASE_URL/camel-karaf/next/ -test $BASE_URL/camel-karaf/latest/components.html 301 $BASE_URL/camel-karaf/next/components.html +test $BASE_URL/camel-karaf/latest 302 $BASE_URL/camel-karaf/${C_V} +test $BASE_URL/camel-karaf/latest/ 302 $BASE_URL/camel-karaf/${C_V}/ +test $BASE_URL/camel-karaf/latest/components.html 302 $BASE_URL/camel-karaf/${C_V}/components.html +test $BASE_URL/camel-karaf/latest/components.html 302 $BASE_URL/camel-karaf/${C_V}/components.html +test $BASE_URL/camel-karaf/${C_V}/components.html 200 test $BASE_URL/camel-karaf/next/components.html 200 -test $BASE_URL/camel-kafka-connector 301 $BASE_URL/camel-kafka-connector/next/ -test $BASE_URL/camel-kafka-connector/ 301 $BASE_URL/camel-kafka-connector/next/ +test $BASE_URL/camel-kafka-connector 302 $BASE_URL/camel-kafka-connector/${CKC_V}/ +test $BASE_URL/camel-kafka-connector/ 302 $BASE_URL/camel-kafka-connector/${CKC_V}/ test $BASE_URL/camel-kafka-connector/next 301 $BASE_URL/camel-kafka-connector/next/ test $BASE_URL/camel-kafka-connector/next/ 200 -test $BASE_URL/camel-kafka-connector/latest 301 $BASE_URL/camel-kafka-connector/next/ -test $BASE_URL/camel-kafka-connector/latest/ 301 $BASE_URL/camel-kafka-connector/next/ -test $BASE_URL/camel-kafka-connector/latest/contributor-guide/release-guide.html 301 $BASE_URL/camel-kafka-connector/next/contributor-guide/release-guide.html +test $BASE_URL/camel-kafka-connector/latest 302 $BASE_URL/camel-kafka-connector/${CKC_V} +test $BASE_URL/camel-kafka-connector/latest/ 302 $BASE_URL/camel-kafka-connector/${CKC_V}/ +test $BASE_URL/camel-kafka-connector/contributor-guide/release-guide.html 302 $BASE_URL/camel-kafka-connector/${CKC_V}/contributor-guide/release-guide.html +test $BASE_URL/camel-kafka-connector/latest/contributor-guide/release-guide.html 302 $BASE_URL/camel-kafka-connector/${CKC_V}/contributor-guide/release-guide.html +test $BASE_URL/camel-kafka-connector/${CKC_V}/contributor-guide/release-guide.html 200 test $BASE_URL/camel-kafka-connector/next/contributor-guide/release-guide.html 200 -test $BASE_URL/camel-kamelets 301 $BASE_URL/camel-kamelets/next/ -test $BASE_URL/camel-kamelets/ 301 $BASE_URL/camel-kamelets/next/ +test $BASE_URL/camel-kamelets 302 $BASE_URL/camel-kamelets/next/ +test $BASE_URL/camel-kamelets/ 302 $BASE_URL/camel-kamelets/next/ test $BASE_URL/camel-kamelets/next 301 $BASE_URL/camel-kamelets/next/ test $BASE_URL/camel-kamelets/next/ 200 -test $BASE_URL/camel-kamelets/latest 301 $BASE_URL/camel-kamelets/next/ -test $BASE_URL/camel-kamelets/latest/ 301 $BASE_URL/camel-kamelets/next/ -test $BASE_URL/camel-kamelets/latest/github-source.html 301 $BASE_URL/camel-kamelets/next/github-source.html +test $BASE_URL/camel-kamelets/latest 302 $BASE_URL/camel-kamelets/next +test $BASE_URL/camel-kamelets/latest/ 302 $BASE_URL/camel-kamelets/next/ +test $BASE_URL/camel-kamelets/github-source.html 302 $BASE_URL/camel-kamelets/next/github-source.html +test $BASE_URL/camel-kamelets/latest/github-source.html 302 $BASE_URL/camel-kamelets/next/github-source.html +test $BASE_URL/camel-kamelets/next/github-source.html 200 test $BASE_URL/camel-kamelets/next/github-source.html 200 -test $BASE_URL/camel-quarkus 301 $BASE_URL/camel-quarkus/next/ -test $BASE_URL/camel-quarkus/ 301 $BASE_URL/camel-quarkus/next/ +test $BASE_URL/camel-quarkus 302 $BASE_URL/camel-quarkus/${CQ_V}/ +test $BASE_URL/camel-quarkus/ 302 $BASE_URL/camel-quarkus/${CQ_V}/ test $BASE_URL/camel-quarkus/next 301 $BASE_URL/camel-quarkus/next/ test $BASE_URL/camel-quarkus/next/ 200 -test $BASE_URL/camel-quarkus/latest 301 $BASE_URL/camel-quarkus/next/ -test $BASE_URL/camel-quarkus/latest/ 301 $BASE_URL/camel-quarkus/next/ -test $BASE_URL/camel-quarkus/latest/user-guide/cdi.html 301 $BASE_URL/camel-quarkus/next/user-guide/cdi.html +test $BASE_URL/camel-quarkus/latest 302 $BASE_URL/camel-quarkus/${CQ_V} +test $BASE_URL/camel-quarkus/latest/ 302 $BASE_URL/camel-quarkus/${CQ_V}/ +test $BASE_URL/camel-quarkus/user-guide/cdi.html 302 $BASE_URL/camel-quarkus/${CQ_V}/user-guide/cdi.html +test $BASE_URL/camel-quarkus/latest/user-guide/cdi.html 302 $BASE_URL/camel-quarkus/${CQ_V}/user-guide/cdi.html +test $BASE_URL/camel-quarkus/${CQ_V}/user-guide/cdi.html 200 test $BASE_URL/camel-quarkus/next/user-guide/cdi.html 200 test $BASE_URL/manual 301 $BASE_URL/manual/ -test $BASE_URL/manual/latest 301 $BASE_URL/manual/ -test $BASE_URL/manual/latest/ 301 $BASE_URL/manual/ -test $BASE_URL/manual/latest/component-dsl.html 301 $BASE_URL/manual/component-dsl.html +test $BASE_URL/manual/latest 302 $BASE_URL/manual +test $BASE_URL/manual/latest/ 302 $BASE_URL/manual/ +test $BASE_URL/manual/latest/component-dsl.html 302 $BASE_URL/manual/component-dsl.html test $BASE_URL/manual/ 200 test $BASE_URL/manual/component-dsl.html 200