Как в Apache/local можно обеспечить поддержку как доступа к каталогам, так и доступа к именованным хостам?

Как в Apache/local можно обеспечить поддержку как доступа к каталогам, так и доступа к именованным хостам?

Я понимаю, как использовать директивы 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 с разными DocumentRoots, например

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/того же веб-сайта. Если сайты не все находятся в одном каталоге файловой системы, вам нужно использовать Aliases, например

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>

Связанный контент