В такой структуре каталогов есть несколько файлов (с уникальными именами):
/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 (или 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...