在 Apache/local 中,如何同時支援目錄存取和命名主機存取?

在 Apache/local 中,如何同時支援目錄存取和命名主機存取?

我了解如何使用 Directory 和(我認為)VirtualHost 指令。我進一步了解我不能混合它們(儘管我可以嵌套它們)。當我混合使用它們時,我得到 404 not found for the Directory-type URLs that used work.

那麼,我該如何支援在設定檔中瀏覽「localhost/my/website」和「mydomainname.com」等 URL?

我的理由:我想讓 mydomainname.com 使用 https,同時讓其他網站使用 http。我已經在我的 HOSTS 檔案(我的本地 DNS)中將 mydomainname.com 轉換為 127.0.0.1,所以我想我一定已經接近解決方案了。

我已經為此工作了幾個小時,但沒有真正取得任何進展。 Apache 文件對我沒有幫助。

理想情況下,有人可以為我描繪出如何實現我想要的目標。

答案1

根據這個問題,我認為您不明白Directory和之間的區別VirtualHost

<Directory></Directory>用於包含一組僅適用於指定目錄、該目錄的子目錄以及相應目錄中的文件的指令。

<VirtualHost></VirtualHost>用於包含一組僅適用於特定虛擬主機的指令。可以使用虛擬主機上下文中允許的任何指令。當伺服器收到對特定虛擬主機上的文件的請求時,它會使用該<VirtualHost>部分中包含的設定指令。

<Directory>指令不控制“目錄類型 URL”。DocumentRootAlias指令控制在檔案系統中的位置找到內容。這些指令可以直接在伺服器配置中或在<VirtualHost>.

對於您想要實現的目標,您只需要兩個<VirtualHost>具有不同DocumentRoots 的 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/如果網站不全部位於同一檔案系統目錄下,則需要使用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>

相關內容