Как мне сообщить Apache, какой каталог приложений использовать для разных доменов?
-
06-07-2019 - |
Вопрос
Я пытаюсь создать сайт с помощью CodeIgniter.У меня будет несколько доменов, обслуживаемых с этого сервера, и я пытаюсь отделить HTTP-запросы для www.example1.com от запросов для www.example2.com, а затем перенаправить их в правильные папки приложений.
Скажем, это моя структура каталогов:
- система
- приложение
- пример1
- пример2
- приложение
Итак, этот запрос
www.example1.com/gallery/
затем будет перенаправлен в папку exmaple1.
Есть ли у кого-нибудь пример кода для этого?Очевидно, вам нужно будет использовать модуль ReWrite...
Я просмотрел документацию Apache, но ничего не смог найти.Дайте мне знать, если вам нужна дополнительная информация по этому поводу.
Решение
Использование VirtualHost (и Alias, Rewrite) является основным ответом, но если вы думаете, что будете добавлять/удалять другие хосты, используя ту же настройку, то я бы рассмотрел вариант mod_macro модуль.Это сторонний модуль, который поможет вам упростить настройку Apache и избежать ошибок копирования/вставки.
Простой пример с вашим макетом: определите следующее:
<Macro vh80 name>
<VirtualHost *:80>
DocumentRoot /system/application/$name
ServerName www.$name.com
CustomLog /system/application/$name/logs/access.log virtcommon
ErrorLog /system/application/$name/logs/error.log
</VirtualHost>
</Macro>
А затем при включении сайта используйте следующую директиву:
Используйте пример vh801
При этом www.example1.com будет настроен на использование настроенного каталога в качестве корневого, а также настроенного каталога для журналов.
Другие советы
То, что вам нужно, называется Виртуальныйхост чтобы www.example1.com и www.exaplme2.com указывали на разные папки в вашей файловой системе.
Если вы дополнительно хотите иметь другой путь в URI для обслуживания основного контента, у вас есть различные альтернативы:
Физически создайте папку и не вносите дальнейших изменений.
Физически создайте ссылку (названную галерею, указывающую на основную корневую папку виртуального хоста) на папку и используйте СледоватьSymLinks вариант для VirtualHost
Используйте Псевдоним директива в VirtualHost
Alias /gallery /
Используйте mod_rewrite
RewriteRule /gallery/(.*) /$1 [QSA]
Самым простым (если позволяет CodeIgniter) будет вариант 1 или 2.
Фрагмент из документации VirtualHost:
Running several name-based web sites on a single IP address. Your server has a single IP address, and multiple aliases (CNAMES) point to this machine in DNS. You want to run a web server for www.example.com and www.example.org on this machine. Note Creating virtual host configurations on your Apache server does not magically cause DNS entries to be created for those host names. You must have the names in DNS, resolving to your IP address, or nobody else will be able to see your web site. You can put entries in your hosts file for local testing, but that will work only from the machine with those hosts entries. Server configuration # Ensure that Apache listens on port 80 Listen 80 # Listen for virtual host requests on all IP addresses NameVirtualHost *:80 <VirtualHost *:80> DocumentRoot /www/example1 ServerName www.example.com # Other directives here </VirtualHost> <VirtualHost *:80> DocumentRoot /www/example2 ServerName www.example.org # Other directives here </VirtualHost> The asterisks match all addresses, so the main server serves no requests. Due to the fact that www.example.com is first in the configuration file, it has the highest priority and can be seen as the default or primary server. That means that if a request is received that does not match one of the specified ServerName directives, it will be served by this first VirtualHost.
На самом деле это два вопроса:
как сделать www.example1.com и www.example2.com разными?Ответом на это является Виртуальныйхост директива.
Как сделать так, чтобы /gallery указывал на example1?Это делается с помощью директивы Alias.