Skip to content

SCS Manager URLs contain /index.php

Symptom

Drupal links and redirects include index.php in the path, for example:

  • https://manager.example.org/index.php/de/admin/structure
  • instead of https://manager.example.org/de/admin/structure

The site still works; only URL appearance and “clean URL” behaviour are affected.

Cause

The Nginx config inside the scs-manager--drupal container used a Drupal 7 rewrite:

rewrite ^/(.*)$ /index.php?q=$1 last;

Drupal 8+ expects the original path in REQUEST_URI. With the legacy rewrite, PHP sees REQUEST_URI=/index.php?q=de/..., Drupal sets baseUrl to /index.php, and generated links keep the index.php prefix.

Fix (deployment repo)

This repository mounts a corrected config from scs-manager-stack/configs/nginx/drupal.conf:

location @drupal {
  rewrite ^ /index.php last;
}

Apply after pulling the change:

cd /var/deploy/soda_scs_manager_deployment
docker compose up -d --force-recreate scs-manager--drupal
docker compose exec scs-manager--drupal drush cr

Verify

curl -sL "https://${SCS_MANAGER_DOMAIN}/de/user/login" | grep -o 'href="../[^"]*index\.php[^"]*"' | head

No output means links no longer use index.php. You can also inspect drupal-settings-json in the page source: currentQuery should not contain a q key for normal page requests.

Permanent fix in the image

The bind mount is a deployment workaround until scs-manager-image ships the same drupal.conf. Once the image is updated, the mount can remain (it overrides the image file) or be removed if the image matches.