名前ベースのホスティングで複数のウェブサイトをホストするように構成したVPSがあります。 example.comとwww.example.comだけを使用している間は、すべて問題ありません。 example.netでも機能しますが、example.netを試してみると、defaultサイト構成に戻り、デフォルトが表示されます。 (空の)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 [email protected]
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 [email protected]
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はZendFrameworkサイトであるため。念のため、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]
どんな助けでも大歓迎です!
編集私の質問は[〜#〜]絶対に[〜#〜]明確です:問題は、1つのサイトがwwwプレフィックスを使用する場合と使用しない場合の両方で機能し、2番目のサイトは機能しないことです。 2番目のサイトがwwwプレフィックスでも機能するようにする方法を知りたいです。
構成ディレクティブの優先順位が、Apacheが要求を処理する方法と一致していることを確認してください。つまり、ディレクティブが次のように読み込まれると、運が悪くなります。
それらが単一のファイルで宣言されているか複数のファイルで宣言されているかは関係ありません-「universal.lv」が最後である限り、default/catch-all vhostが先行するため、到達しません。
この理由から、私は通常、default/catch-all configに「z-default.conf」(または、「z」、「zz」などで始まるドメインがある場合)という名前を付けて、他の仮想ホストが一致しない場合にのみ処理されます。
それに応じて名前を変更してみてください。
更新:_default_
VirtualHostディレクティブと混同しないように
ワイルドカードDNS を使用してexample.comへのすべてのリクエストをサーバーのIPに送信し(キーが間違っているサブドメインをキャッチ)、Apacheは次の構成ファイルを解析します。
VirtualHost _default_:80
/ServerName <hostname>
-サーバーのIPに対するリクエストをキャッチします(プライマリドメインにリダイレクトするか、conf.d/security
で指定されたデフォルトのDirectory
で単にブロックできます)VirtualHost *:80
/ServerName www.example.com
VirtualHost *:80
/ServerName www.example2.com
VirtualHost *:80
/ServerName example.com
/ServerAlias *.example.com
-正規のwwwドメインにリダイレクトしますVirtualHost *:80
/ServerName example2.com
/ServerAlias *.example2.com
-正規のwwwドメインにリダイレクトします文書化されているように Apacheは最初に一致するVirtualHost(つまり、_default_:80
)を選択しますが、ServerAlias
ディレクティブでワイルドカードを使用している場合はこの動作は望ましくありません。
最初に 仮想ホストに関するApacheドキュメント を読むことをお勧めします。
優れた例が http://httpd.Apache.org/docs/2.2/vhosts/name-based.html に示されています。
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain
</VirtualHost>
<VirtualHost *:80>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
</VirtualHost>
NameVirtualHost の部分に注意してください。エラーログ(/var/log/Apache2/error.log)は、間違いの可能性があることを警告しているはずです。
注:構成ファイルを変更した後、Apacheを再起動する必要があります。
httpd.confでNameVirtualHostを有効にする必要があります。そうすると、同じip:portで複数の仮想ホストを定義できます。