Есть несколько файлов (с уникальными именами) в такой структуре каталогов:
/var/www/domain1/unique_filename1
/var/www/domain2/unique_filename2
/var/www/domain3/unique_filename3
На данный момент все каталоги домена доступны как подкаталоги главного домена и клиенты могут получить доступ к файлам, используя следующие URI:
www.my-master-domain.com/domain1/unique_filename1
www.my-master-domain.com/domain2/unique_filename2
www.my-master-domain.com/domain3/unique_filename3
Я бы хотел изменить конфигурацию Apache 2.4, чтобы я мог получать доступ к файлам без упоминания вторичных доменов в своих URL-адресах, например:
www.my-master-domain.com/unique_filename1
www.my-master-domain.com/unique_filename2
www.my-master-domain.com/unique_filename3
И, конечно, нежелательно выполнять какие-либо перенаправления в клиентских браузерах (и, если я хотел, это было бы невозможно в этом особом случае), мне просто нужно напрямую серверить файлы через второй набор упомянутых URL.
Есть идеи?
Вы можете создать RewriteMap
, который отображает "уникальные" имена файлов в домен , в котором он хранится. Затем вы можете использовать директиву RewriteRule
для поиска домена из запрошенного «уникального» имени файла и внутренне переписать запрос.
Например, в вашем конфигурации сервера, определите RewriteMap
:
RewriteMap fn2domain "txt:/var/www/filename-to-domain-map.txt"
Затем в /var/www/filename-to-domain-map.txt
вы должны включить все сопоставления ваших файлов:
# Filename to Domain map
unique_filename1 domain1
unique_filename2 domain2
unique_filename3 domain3
Теперь вы можете использовать mod_rewrite для ссылки на эту карту, чтобы внутренне переписать запрос из / unique_filename2
в / domain2 / unique_filename2
(например).
RewriteEngine On
RewriteRule ^/([^/]+)$ /${fn2domain:$1}/$1 [L]
Предполагается, что "unique_filename" - именно это; просто имя файла. Никакого дополнительного URL-пути.
Вы могли бы сделать поиск более эффективным, используя dbm:
DBM Hash File (или fastdbd:
SQL Query?) Вместо обычного текстового файла. , если у вас много «имен файлов».
Ссылка:
https://httpd.apache.org/docs/2.4/rewrite/rewritemap.html
В качестве альтернативы вы можете выполнить проверку файловой системы на наличие "unique_filename" в каждом подкаталоге домена . Побеждает первый матч. Этот может подойти, если у вас есть только 2 или 3 подкаталога домена, но если у вас их много, это может стать проблемой производительности, поскольку проверки файловой системы относительно дороги. Например, снова используя mod_rewrite:
RewriteEngine On
# Is it in domain1? Then rewrite to domain1 subdirectory
RewriteRule %{DOCUMENT_ROOT}/domain1/$1 -f
RewriteRule ^/([^/]+)$ /domain1/$1 [L]
# Is it in domain2? Then rewrite to domain2 subdirectory
RewriteRule %{DOCUMENT_ROOT}/domain2/$1 -f
RewriteRule ^/([^/]+)$ /domain2/$1 [L]
# Is it in domain3? Then rewrite to domain3 subdirectory
RewriteRule %{DOCUMENT_ROOT}/domain3/$1 -f
RewriteRule ^/([^/]+)$ /domain3/$1 [L]
# Repeat for each domain...