У меня есть домен с веб-сайтом, на который можно попасть по двум адресам, mydomain.com/pathA
и mydomain.com/pathB
.
Но на самом деле это один и тот же каталог на сервере. Он содержит установку MediaWiki, которая довольно велика и содержит файлы изображений, которыми следует поделиться. Но поскольку я не хочу представлять его как вики как таковой, я хочу иметь возможность настраивать различные хуки, надстройки, права, скины и т. Д. Итак, теперь я создал символическую ссылку с пути A на путь B и добавил это .htaccess в корне документа:
Options -Indexes
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/pathA
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /pathA/index.php?title=$1 [L,QSA]
RewriteCond %{REQUEST_URI} ^/pathB
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /pathB/index.php?title=$1 [L,QSA]
Теперь я хочу, чтобы pathB был защищен с помощью аутентификации Apache. Могу я сделать это в одном файле .htaccess? Я не могу редактировать httpd.conf.
Если это можно сделать без символической ссылки, меня устраивает, если я могу сохранить единственную папку для установки.
Мне напомнили об этом вопросе из-за отрицательного голоса. Я бы предпочел видеть, что это было одобрение или, по крайней мере, сопровождалось конструктивным комментарием, но это нормально. ;-)
В любом случае, я думаю, что тем временем нашел ответ (или, по крайней мере, альтернативное решение). Это конфигурация, которую я использую сейчас, и она работает нормально. Вместо разных URL-адресов я использую разные поддомены. Это также устраняет необходимость в символических ссылках (хотя они, вероятно, в любом случае не требовались).
Я прокомментировал это тем, что я считать это происходит. Мне пришлось немало поэкспериментировать и возиться, и для меня это все еще немного волшебства. В любом случае, я надеюсь, что это будет полезно:
# Create an environment variable if the url matches the/a password protected subdomain.
SetEnvIf Host alternative.example.com passreq
SetEnvIf Host alternative.www.example.com passreq
# Initialize the authentication type.
AuthType Basic
AuthName "Reveil yourself"
AuthUserFile /srv/path/to/.htpasswd
Require valid-user
# By default allow access, only deny when the environment variable
# is set, to trigger basic authentication in that case.
Order allow,deny
Allow from all
Deny from env=passreq
Allow from 127.0.0.1
Satisfy any
Остальная часть моего .htaccess в этом отношении проста. Он не делает различий между различными поддоменами. Я также больше не использовал символические ссылки. Теперь я просто использую вышеуказанную конфигурацию, чтобы добавить аутентификацию для определенного поддомена, и после этого запрос - любой запрос - просто направляется через тот же index.php, который проверяет URL-адрес и загружает соответствующую конфигурацию.
Конечный результат работает хорошо: у меня есть одна настройка MediaWiki, доступ к которой можно получить через два разных URL-адреса. Обычный URL-адрес полностью доступен только для чтения и в нем отсутствуют все инструменты редактирования, в то время как специальная версия для администратора позволяет команде редактировать контент.