Я понимаю, как использовать директивы Directory и (я думаю) VirtualHost. Я также понимаю, что я не могу смешивать их (хотя я могу их вкладывать). Когда я смешиваю их, я получаю 404 not found для URL-адресов типа Directory, которые раньше работали.
Как же тогда я могу обеспечить поддержку просмотра обоих URL-адресов, таких как «localhost/my/website», а также «mydomainname.com» в моем конфигурационном файле?
Мое обоснование: я хочу, чтобы mydomainname.com использовал https, а другие мои сайты использовали http. У меня уже есть mydomainname.com, транслируемый в 127.0.0.1 в моем файле HOSTS (мой локальный DNS), поэтому я думаю, что я близок к решению.
Я работаю над этим уже несколько часов и ничего не получается. Документация Apache мне не помогает.
В идеале кто-нибудь мог бы нарисовать мне схему того, как достичь желаемого.
решение1
Судя по вопросу, я думаю, вы не понимаете разницы между Directory
и VirtualHost
.
<Directory>
и</Directory>
используются для включения группы директив, которые будут применяться только к указанному каталогу, подкаталогам этого каталога и файлам в соответствующих каталогах.
<VirtualHost>
и</VirtualHost>
используются для включения группы директив, которые будут применяться только к определенному виртуальному хосту. Может использоваться любая директива, разрешенная в контексте виртуального хоста. Когда сервер получает запрос на документ на определенном виртуальном хосте, он использует директивы конфигурации, включенные в раздел<VirtualHost>
.
Директива <Directory>
не контролирует «URL-адреса типа каталога».TheDocumentRoot
иAlias
директивы контролируют, где в файловой системе находится содержимое. Эти директивы могут использоваться непосредственно в конфигурации сервера или внутри <VirtualHost>
.
Для того, чего вы пытаетесь достичь, вам просто нужны два <VirtualHost>
s с разными DocumentRoot
s, например
Listen 80
<VirtualHost *:80>
DocumentRoot "/var/www"
ServerName localhost
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/var/www/examplecom"
ServerName example.com
</VirtualHost>
Теперь у вас есть и то, и другое для одного http://localhost/examplecom/
и http://example.com/
того же веб-сайта. Если сайты не все находятся в одном каталоге файловой системы, вам нужно использовать Alias
es, например
Listen 80
<VirtualHost *:80>
DocumentRoot "/var/www"
ServerName localhost
Alias "/examplecom" "/home/user/sites/example.com"
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/home/user/sites/example.com"
ServerName example.com
</VirtualHost>