diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 16b36303ddd62bc25d28c52be6b206a9773ea56b..011eef3a4c7dcf8cc43b221239ab01c9a4e1acbf 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -5,6 +5,16 @@ workflow:
   rules:
     - if: $CI_COMMIT_BRANCH
 
+setup:
+  stage: .pre
+  tags:
+    - docker
+  script:
+    - echo "ROOT_RELATIVE_NAMESPACE=${CI_PROJECT_NAMESPACE#$CI_PROJECT_ROOT_NAMESPACE} >> build.env"
+  artifacts:
+    reports:
+      dotenv: build.env
+
 # We can't deploy multiple different variants of GitLab Pages sites (e.g. one
 # per branch), so we use this quick instead. GitLab has a special browsable URL
 # for job artifacts on public projects, and we can create an Environment that
@@ -14,12 +24,13 @@ workflow:
   stage: deploy
   tags:
     - docker
-#  variables:
-#    ROOT_RELATIVE_NAMESPACE: "${CI_PROJECT_NAMESPACE#$CI_PROJECT_ROOT_NAMESPACE}"
+  variables:
+    PROJECT_SUB_NAMESPACE: /
   script:
     - sed -i "s/%%BRANCH%%/$CI_COMMIT_BRANCH/g" src/index.html
     - mv src public
     - echo $SHELL
+    - echo $PROJECT_SUB_NAMESPACE
     - echo $ROOT_RELATIVE_NAMESPACE
     - echo $CI_ENVIRONMENT_URL
     - printenv
@@ -29,12 +40,20 @@ workflow:
 
 # Deploy a review environment for any push to a branch that is not the default
 # branch
-review:
+review-sub:
+  extends: .deploy
+  rules:
+    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
+  environment:
+    name: "review-sub $CI_COMMIT_BRANCH"
+    url: "https://${CI_PROJECT_ROOT_NAMESPACE}.${CI_PAGES_DOMAIN}/-${PROJECT_SUB_NAMESPACE}${CI_PROJECT_NAME}/-/jobs/$CI_JOB_ID/artifacts/public/index.html"
+
+review-rel:
   extends: .deploy
   rules:
     - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
   environment:
-    name: "review $CI_COMMIT_BRANCH"
+    name: "review-rel $CI_COMMIT_BRANCH"
     url: "https://${CI_PROJECT_ROOT_NAMESPACE}.${CI_PAGES_DOMAIN}/-${ROOT_RELATIVE_NAMESPACE}/${CI_PROJECT_NAME}/-/jobs/$CI_JOB_ID/artifacts/public/index.html"
 
 # Deploy to GitLab Pages for pushes on the default branch