伺服器別名不工作
我有一個 VPS,我已將其配置為使用基於名稱的託管來託管多個網站。只使用example.com和www.example.com都很好。它也適用於example.net,但是當我嘗試example.net時,它會恢復為我的預設站點配置,它只顯示我的預設(空)index.html 頁面。
這是預設文件:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost>
這是example.com站點的配置:
<VirtualHost *:80> ServerAdmin admin@example.com ServerName example.com ServerAlias www.example.com DocumentRoot /srv/www/example.com/public_html/ ErrorLog /srv/www/example.com/logs/error.log CustomLog /srv/www/example.com/logs/access.log combined <Directory /srv/www/example.com/public_html/> AllowOverride All Order allow,deny allow from all </Directory> </VirtualHost>
這是example.net站點的配置:
<VirtualHost *:80> ServerAdmin admin@example.net ServerName example.net ServerAlias www.example.net DocumentRoot /srv/www/example.net/public_html/ ErrorLog /srv/www/example.net/logs/error.log CustomLog /srv/www/example.net/logs/access.log combined <Directory /srv/www/example.net/public_html/> AllowOverride All Order allow,deny allow from all </Directory> </VirtualHost>
問題可能出在哪裡?
我相信,ServerAlias 屬性出了點問題。
可能是因為網站的建構方式嗎?因為example.com是一個Joomla站點,而example.net是一個 Zend Framework 站點。以防萬一,我還將為example.net插入 .htaccess 文件,因為example.com已禁用它: example.net:
SetEnv APPLICATION_ENV development RewriteRule ^(browse|config).* - [L] ErrorDocument 500 /error-docs/500.shtml SetEnv CACHE_OFFSET 2678400 <FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$"> Header set Expires "Fri, 25 Sep 2037 19:30:32 GMT" Header unset ETag FileETag None </FilesMatch> RewriteEngine On RewriteRule ^(adm|statistics) - [L] RewriteRule ^/public/(.*)$ http://example.net/$1 [R] RewriteRule ^(.*)$ public/$1 [L]
任何幫助將不勝感激!
編輯這樣我的問題就很清楚了:問題是,一個站點既可以使用www前綴,也可以不使用它,而第二個站點則不能。我想知道如何使第二個站點也可以使用www前綴。
確保配置指令中的優先順序與 Apache 處理請求的方式相匹配 - 即,如果您的指令像這樣載入,您將不會有太多運氣:
- example.com
- 預設/包羅萬象
- universal.lv
不管它們是在單個文件還是多個文件中聲明 - 只要“universal.lv”是最後一個,就不會到達,因為 default/catch-all vhost 將在它之前。
出於這個原因,我通常將我的預設/catch-all 配置命名為“z-default.conf”(或者,如果您有一個以“z”、“zz”…等開頭的域),以確保它是僅當沒有其他虛擬主機匹配時才處理。
嘗試相應地重命名。
**更新:**以免與
_default_
VirtualHost 指令混淆使用萬用字元 DNS將所有對 example.com 的請求定向到伺服器的 IP(擷取錯誤鍵入的子域),Apache 解析以下配置文件:
- 000-default.conf -
VirtualHost _default_:80
/ServerName <hostname>
- 擷取針對伺服器 IP 的請求(可以重定向到主域或簡單地使用中Directory
指定的預設值進行阻止conf.d/security
)- 範例.conf -
VirtualHost *:80
/ServerName www.example.com
- example2.conf -
VirtualHost *:80
/ServerName www.example2.com
- zzz-example.conf -
VirtualHost *:80
//ServerName example.com
-ServerAlias *.example.com
重定向到規範的 www 域- zzz-example2.conf -
VirtualHost *:80
//ServerName example2.com
-ServerAlias *.example2.com
重定向到規範的 www 域如文件所述, Apache 會選擇第一個匹配的 VirtualHost(即),但如果您在指令
_default_:80
中使用萬用字元,則這種行為是不可取的。ServerAlias