2009年10月30日

[Apache-Users 7495]【質問】VirtualHost の設定記述をよりスマートに書きたい

** Apache ユーザーズメーリングリスト **
** 注意:このメールへの返信は Apache-Users へ行きます **

だいすけといいます。

今、以下のようにhttpd.confをかいています。


NameVirtualHost xxx.xx.xxx.xxx:80

NameVirtualHost xxx.xx.xxx.xxx:443

#CPXにアクセスしよーとしてるかしらべる。

SetEnvIfNoCase REQUEST_URI ^/webmail/? CPX=yes

SetEnvIfNoCase REQUEST_URI ^/ControlPanel/? CPX=yes

SetEnvIfNoCase REQUEST_URI ^/cpimages/? CPX=yes

#docrootの直ぐ次ぎが[A-Z0-9%] のときかどーかしらべる。

SetEnvIf REQUEST_URI ^/[A-Z0-9%] YOYAKUKEYWORD=yes

<VirtualHost xxx.xxx.xx.xx:80>

SSLEngine off

ServerName example.com

DocumentRoot "/var/www/html"

CustomLog logs/access_log-example.com common

CustomLog logs/access_log-combined-example.com combined env=!no_log

ErrorLog /var/log/httpd/error_log-example.com

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteOptions inherit

RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)

RewriteRule .* - [F]


###############################################################################################################

RewriteCond %{ENV:CPX} !yes

RewriteCond %{ENV:YOYAKUKEYWORD} yes

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^!(SEOHUB)(.*)$ /SEOHUB.php?key=$1[L,QSA]

</IfModule>

</VirtualHost>

で、

======================================================

======================================================

http://*****.example.com/hoge.php?aaa=bbb =>
http://example.com/hoge.php?aaa=bbb&subdomain=*****

https://*****.example.com/hoge.php?aaa=bbb =>
https://example.com/hoge.php?aaa=bbb&subdomain=*****

というリダイレクト(301で)を行いたいとおもっています。

(****の部分は任意の文字列。SSLのon/offは引き継ぐ)

======================================================

そしてさらに、

同様のりくつで、

他のドメイン(仮に、b***.com, c*** とします)も、virtualhostとして追加したいと思っています

(ドメインが違えば、ドキュメントルートもちがいます)

======================================================

そして,これらのすべての組み合わせパターン(

http://example.com

http://****.example.com

https://example.com

https://****.example.com

http://b***.com

http://****.b***.com

https://b***.com

https://****.b***.com

http://c***.com

http://****.c***.com

https://c***.com

https://****.c***.com

について、ログをわけたいと思っています。

で、これを書こうとすると、以下のように、冗長になってしまいます。

(下記で、★以外は共通)

====================================

<VirtualHost xxx.xxx.xx.xx:★> (<=80か443)

SSLEngine ★

ServerName ★

DocumentRoot "/var/www/html" ★

CustomLog logs/access_log-★ common

CustomLog logs/access_log-combined-★ combined env=!no_log

ErrorLog /var/log/httpd/error_log-★

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteOptions inherit

RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)

RewriteRule .* - [F]


###############################################################################################################

RewriteCond %{ENV:CPX} !yes

RewriteCond %{ENV:YOYAKUKEYWORD} yes

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^!(SEOHUB)(.*)$ /SEOHUB.php?key=$1[L,QSA]

</IfModule>

</VirtualHost>

====================================

そして、マニュアルみたら、

VirtualHost が複数あって、

どのServerName(とポート)にもひっかからない場合には、一番上のバーチャルホストが使われる、とありました。

・・・が、それは80なので、httpS://example.com httpS://b***.com、httpS://c***.com
のときに対応できません。

あるいは、ポートがちがうので、一番上に、<xxx.xx.xxx.xxx:80>、2番目に<xxx.xx.xxx.xxx:443>

ただ、そうすると、やは http://b***.com http://c***.comに対応できません。IPアドレスは1つしかないです)

で、またマニュアルをみると、「バーチャルホストの一番上」とは書いていないのですが、

============================

サーバの設定

<VirtualHost _default_:80>

DocumentRoot /www/default80

# ...

</VirtualHost>

<VirtualHost _default_:*>

DocumentRoot /www/default

# ...

</VirtualHost>

============================

という書き方がありました。

でも、「バーチャルホストの一番上」と書いていないので、不安でして。

どのように書けば、スマートで負担も少ないでしょうか?

よろしくお願いします。
--
入退会・変更・配送一時停止は以下へ
http://www.apache.jp/mailman/listinfo/apache-users


投稿者 xml-rpc : 2009年10月30日 03:14
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/89828
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。