一般的な大規模仮想ホスト構成により、すべての仮想ホスト要求に対して404ステータスコードが発生する

一般的な大規模仮想ホスト構成により、すべての仮想ホスト要求に対して404ステータスコードが発生する

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作業を行う場合、ウェブサイトと本質的に重複するコンテンツを持つことは有害である可能性があります。

おすすめ記事