Значение директивы RewriteBase
, определенной в родительских конфигурациях, не наследуется дочерними конфигурациями по умолчанию * 1 . Вам нужно явно включить это с помощью опции MergeBase
в родительской конфигурации.
Например:
<Directory /var/www/backend_dev/>
Options FollowSymLinks
RewriteEngine On
RewriteBase /backenddev/
RewriteOptions MergeBase
AllowOverride All
...
</Directory>
Обратите внимание, что дочерние конфигурации могут переопределить это, установив там собственные RewriteBase
.
* 1 Это поведение по умолчанию фактически изменилось в Apache 2.4.4. Между 2.4.0 и 2.4.3 значение RewriteBase
, по-видимому, было объединено с дочерними конфигурациями по умолчанию.
Ссылка:
MergeBase С помощью этой опции значение RewriteBase копируется из того места, где оно явно определено, в любой подкаталог или подкаталог, который не определяет его собственный RewriteBase. Это было поведение по умолчанию в версиях с 2.4.0 по 2.4.3, и флаг для его восстановления доступен Apache HTTP Server 2.4.4 и новее.
Обратите внимание, однако, что только этот параметр не включает mod_rewrite наследование . Директивы в дочерних конфигурациях (.htaccess
) по-прежнему полностью переопределяют директивы в родительском контейнере <Directory>
. Параметр MergeBase
относится только к значению RewriteBase
.
Помимо:
RewriteRule ^share/([ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijklmnpqrstuvwxyz123456789]{8})$ share.php?token=$1
Это можно «упростить» до:
RewriteRule ^share/([a-np-z1-9]{8})$ share.php?token=$1 [NC]
Поскольку только o
, O
и 0
опускаются в символе диапазоны .
Флаг NC
должен тогда соответствовать соответствующим прописным буквам.
Кроме того, рассмотрите возможность добавления флага L
, поскольку у вас есть «другие правила» - и они, вероятно, будут обрабатываться без необходимости (при условии, что конфликта уже нет).