Apache Rewrite: ドメイン名 (HTTP_HOST ではなく) に基づいてルールを記述するにはどうすればよいですか?

Apache Rewrite: ドメイン名 (HTTP_HOST ではなく) に基づいてルールを記述するにはどうすればよいですか?

HTTP_HOST (www.domainname.com) に基づいて動作する RewriteRule を作成しましたが、ドメイン名部分 (domainname.com) のみに基づいて動作するようにしたいと考えています。

さらに明確にするために

フォルダ構造は次のとおりです/var/www/domainName.com

このルールをApacheの設定ファイルに記述すると

RewriteRule ^/js/(.*) /%{HTTP_HOST}/js/$1 [L]

www.mydomain.com を使用してサイトにアクセスすると、/var/www/www.domainName.com存在しないフォルダーを見つけようとします。

したがって、上記のルールを変換して、HTTP_HOST から「www」を削除する必要があります。

答え1

同じサイトを 2 か所で利用できるようにするよりも、リクエストをリダイレクトすることをお勧めします。トラフィックをリダイレクトするには、新しい VirtualHost を作成します。

<VirtualHost *:80>
    ServerName www.domainName.com
    Redirect / http://domainName.com/
</VirtualHost>

または、www. プレフィックスの存在を検出してユーザーをリダイレクトするルールのセットを他のルールの上に追加します。

RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule /(.*) http://%1/$1 [R,L]

リダイレクトなしで両方のドメイン名にサイトを表示したい場合は、RewriteCond を使用してドメイン名だけを抽出し、それを RewriteRule で %1 として利用できるようになります。

RewriteCond %{HTTP_HOST} ^(?:www\.)?(.*) [NC]
RewriteRule ^/js/(.*) /%1/js/$1 [L]

答え2

それができるかどうかは疑問ですが、適切なディレクトリへのリンクを作成する方が簡単ではないでしょうか?

ln -s yourdomain.com www.yourdomain.com

答え3

使ってみましたか%{DOCUMENT_ROOT}

Servernameまた、ディレクトリ構造で使用するのと同じ名前を vhost に設定している場合も可能です。例:

<VirtualHost *:80>
  DocumentRoot /var/www/domainame.com
  ServerName domainame.com
  ServerAlias www.domainame.com
</VirtualHost>

%{SERVER_NAME}その後、書き換えルールで使用できます。

答え4

あなたの質問を理解したので、ドキュメントルート適切なディレクトリへ:

DocumentRoot /var/www/domainName.com

関連情報