Как я могу сообщить Apache, какой каталог приложений использовать для разных доменов? - PullRequest
2 голосов
/ 22 июня 2009

Я пытаюсь создать сайт с CodeIgniter. У меня будет несколько доменов, обслуживаемых этим сервером, и я пытаюсь отделить HTTP-запросы для www.example1.com от запросов для www.example2.com, а затем перенаправить их в соответствующие папки приложения. 1001 *

Скажите, что это моя структура каталогов:

  • система
    • приложение
      • example1
      • example2

Итак, этот запрос

www.example1.com / gallery /

будет перенаправлен в папку exmaple1.

У кого-нибудь есть пример кода для этого? Очевидно, вам нужно использовать модуль ReWrite ...

Я просмотрел документацию по Apache, но ничего не смог найти. Дайте мне знать, если вам нужна дополнительная информация по этому вопросу.

Ответы [ 3 ]

2 голосов
/ 22 июня 2009

То, что вам нужно, называется VirtualHost , чтобы www.example1.com и www.exaplme2.com указывали каждый на свою папку в вашей файловой системе.

Если вы дополнительно хотите иметь другой путь в URI для обслуживания основного контента, у вас есть несколько вариантов:

  1. Физически создайте папку и не вносите никаких изменений

  2. Физически создайте ссылку (именованную галерею, указывающую на основную корневую папку виртуального хоста) на папку и используйте параметр FollowSymLinks для VirtualHost

  3. Используйте директиву Alias ​​ в VirtualHost

    Alias /gallery /
    
  4. Использовать 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.
1 голос
/ 22 июня 2009

Использование 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>

А затем при включении сайта используйте следующую директиву:

Использовать vh80 пример1

Что позволит настроить www.example1.com на использование настроенного каталога в качестве корневого каталога и настроенного каталога журналов.

1 голос
/ 22 июня 2009

Это действительно два вопроса:

  1. как отличить www.example1.com и www.example2.com? Ответом является директива VirtualHost .

  2. Как заставить / gallery указать на example1? Это делается с помощью директивы Alias.

...