Apache-2.2

Httpd/Apache2 虛擬主機和主機名衝突

  • December 18, 2015

我有一個域,即 test.example.com。

我通過uisng將我的伺服器的主機名設置為此:

hostname test.example.com

然後我在 /etc/httpd/conf/httpd.conf 中添加一個虛擬主機

NameVirtualHost *:80

<VirtualHost *:80>
   DocumentRoot /var/www/html/
</VirtualHost>

<VirtualHost *:80>
   DocumentRoot /var/www/html/mydir
   ServerName test.example.com
   ServerAlias www.test.example.com
</VirtualHost>

然後我重新啟動 Httpd 服務。如果我嘗試訪問 test.example.com,我會在 /var/www/html 中獲得 index.php 而不是指定的文件夾。如果我將主機名更改為除此之外的其他名稱,然後重新啟動 httpd,虛擬主機將按預期工作,因此我只能假設當主機名有傳入連接時,apache 會刪除 url。

列印時在php中

$_SERVER['REQUEST_URI']
$_SERVER['REDIRECT_URL']

我得到/。誰能告訴我如何克服這個問題,或者我應該將主機名設置為其他內容嗎?我有一個使用主機名作為目錄名的備份腳本,因此我可以很好地組織備份,這是我首先更改主機名的主要原因。

在你的情況下,我會替換

NameVirtualHost *:80

<VirtualHost *:80>
   DocumentRoot /var/www/html/
</VirtualHost>

<VirtualHost *:80>
   DocumentRoot /var/www/html/mydir
   ServerName test.example.com
   ServerAlias www.test.example.com
</VirtualHost>

經過

<VirtualHost *:80>
   DocumentRoot /var/www/html/mydir
   ServerName test.example.com
   ServerAlias www.test.example.com
</VirtualHost>

# /!\ THIS HAS TO BE ON THE LAST POSITION /!\
<VirtualHost *:80 *:443>
ServerName localhost
ServerAlias *
DocumentRoot /var/www/html/
</VirtualHost>

像 test.example.com 和 www.test.example.com 以外的所有請求都將傳遞 /var/www/html/

更多資訊:NameVirtualHost在您的情況下沒有用,並且已在 Apache 2.4 https://httpd.apache.org/docs/2.4/en/upgrading.html中刪除

引用自:https://serverfault.com/questions/743957