ServerAliasを使用して複数のサブドメインを持つApache 2.4サーバーを設定しようとしています。プライマリドメインのデフォルト設定は正常に動作します(プライマリドメイン=> 200、すべてのサブドメイン=> 404)。
UseCanonicalName Off
<VirtualHost example.com>
ServerName example.com
ServerAlias www.example.com
VirtualDocumentRoot "/var/www/vhosts/example.com/httpdocs"
DirectoryIndex index.php index.html
<Directory />
Options +Indexes +FollowSymLinks +Includes
<IfModule !mod_access_compat.c>
Require all granted
</IfModule>
<IfModule mod_access_compat.c>
Order allow,deny
Allow from all
</IfModule>
AllowOverride All
</Directory>
</VirtualHost>
ただし、一般的な仮想ホスト設定行を追加すると、Webサーバーはすべての仮想ホスト(サブドメイン)要求に対して404ステータスコードを返します。
UseCanonicalName Off
<VirtualHost example.com>
ServerName example.com
ServerAlias www.example.com
VirtualDocumentRoot "/var/www/vhosts/example.com/httpdocs"
DirectoryIndex index.php index.html
ServerAlias *.example.com
VirtualDocumentRoot "/var/www/vhosts/example.com/%1.0"
DirectoryIndex index.php index.html
<Directory />
Options +Indexes +FollowSymLinks +Includes
<IfModule !mod_access_compat.c>
Require all granted
</IfModule>
<IfModule mod_access_compat.c>
Order allow,deny
Allow from all
</IfModule>
AllowOverride All
</Directory>
</VirtualHost>
正しいフォルダパスで何かをする必要があると思います。フォルダパスは常に次のようになります。
/var/www/vhosts/maindomain.com/subdomain.maindomain.com
私にとって必要なのは、プライマリドメインとそれに接続されている一般的なサブドメインと一致する設定だけです。だから、
www.example.com
example.com
一致フォルダパス:
/var/www/vhosts/example.com/httpdocs
そして
ci.example.com
tracker.example.com
other.example.com
以下のようにフォルダパスが一致する必要があります。
/var/www/vhosts/example.com/ci.example.com
/var/www/vhosts/example.com/tracker.example.com
/var/www/vhosts/example.com/other.example.com
そして、奇妙な理由でサブドメインパスに変更すると、%0.0
サブドメインは機能しますが、デフォルトドメインは機能しません。したがって、それを使用するときはその逆になります。デフォルトドメイン=>404、すべてのサブドメイン=>200.
Apache 2.4のドキュメントで、フォルダ名の魔法文字列リテラルの説明が見つかりました。http://httpd.apache.org/docs/2.4/mod/mod_vhost_alias.html しかし、問題を解決するのはどころか混乱しています...
Webサーバーは、openSUSE 42.2の最小バージョンで実行されます。あなたが提案したように、実際のドメイン名がに変更されましたexample.com
。この問題の助けが必要です。
編集:以下の最初の答えに対する私の意見で述べたように、仮想RewriteRule
ホストの設定には必ずしも何も必要としないソリューションが必要です。私はPHPシステムを使用しているので、彼らだけの(時には非常に複雑な)システムを持っているので、そのような問題に巻き込まれたくありませんRewriteRule
。.htaccess
しかし、他のオプションもcgi
可能です。はい、シンボリックリンクのサポートが有効になっています(または有効にできます)。
編集する:
シンボリックリンクの例は、基本概念を理解するのに役立ちました。しばらく悩んだところで、次の解決策を思い出しました。見つかった最初のルールは常に適用されるため、私に適しています。
UseCanonicalName Off
<VirtualHost *:80>
DocumentRoot "/var/www/vhosts/example.com/httpdocs"
ServerName www.example.com
ServerAlias example.com
<Directory />
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
Allow from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/var/www/vhosts/example.com/httpdocs"
ServerName example.com
ServerAlias *.example.com
VirtualDocumentRoot "/var/www/vhosts/example.com/%1"
<Directory />
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
Allow from all
</Directory>
</VirtualHost>
apachectl -t
そしてapachectl -S
それは重要ではないと言いました。テストを経て動作します! :-)
ベストアンサー1
努力する
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/vhosts/example.com/httpdocs
ServerAlias *.example.com
VirtualDocumentRoot /var/www/vhosts/example.com/%0
</VirtualHost>
これには完全な構成は含まれませんが、ワイルドカードサブドメインを機能させる必要があります。
次にwww.example.com
、すべての要求をexample.com
。最も簡単な方法は、おそらくhtaccessファイルを使用することです。/var/www/vhosts/example.com/www.example.com
または、シンボリックリンクがオンの場合は、次に/var/www/vhosts/example.com/www.example.com
シンボリックリンクを設定できます。/var/www/vhosts/example.com/httpdocs
編集する:
入りたくない場合は、.htaccess
以下を試してください。
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/vhosts/example.com/httpdocs
ServerAlias *.example.com
VirtualDocumentRoot /var/www/vhosts/example.com/%0
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.example.com
RewriteRule ^/(.*)$ http://example.com/$1 [L,R=301]
</VirtualHost>
一種のリダイレクトがなければ、これを行う方法はありません。また、www以外のアイテムをwwwにリダイレクトしたり、www以外のアイテムをwww以外のアイテムにリダイレクトするのも良い習慣です。 SEO作業を行う場合、ウェブサイトと本質的に重複するコンテンツを持つことは有害である可能性があります。