前提・実現したいこと
開発環境で、外部のWebサイト(CRL配布ポイント)に接続できないため、その代替を行うWebサーバを内部に構築しました。
しかし、その外部Webサイトが何種類かあるため、1台のApacheに演じ分けさせたいと考えています。
1 http://192.168.1.2/ → htdocs/index.html (試験用Webサイト)
2 http://crl1.hogehoge.com/test.html → htdocs/crl1/test.crl (CRL配布ポイント1の代替)
3 http://crl2.hogehoge.com/test.html → htdocs/crl2/test.crl (CRL配布ポイント2の代替)
※負荷面では、1のURLへの接続がメインで、2や3はGETリクエストが時折、という程度なので、1台のサーバに
まとめるのは問題ありません。
発生している問題・エラーメッセージ
パターン1 2のURLに接続しているのに、1のURLが表示される(1の場所に、該当するファイルがない場合、HTTP404)
パターン2 HTTP 500出力
該当のソースコード
■htdocs/.htaccess(パターン1時)
RewriteEngine on
RewriteCond %{HTTP_HOST} ^crl1.hogehoge.com
RewriteRule /[^/]* cert/$1 [L]
RewriteCond %{HTTP_HOST} ^crl2.hogehoge.com
RewriteRule /[^/]* cert2/$1 [L]
■htdocs/.htaccess(パターン2時)
RewriteEngine on
RewriteCond %{HTTP_HOST} ^crl1.hogehoge.com
RewriteRule ^(.)$ crl1/$1 [L]
RewriteCond %{HTTP_HOST} ^crl2.hogehoge.com
RewriteRule ^(.)$ crl2/$1 [L]
試したこと
上記のように、.htaccessファイルを色々書き換えているのですが、
「/test.html」のみにマッチして、「/crl1/test.html」にマッチしない正規表現を作れていません。
※パターン1は、単に”書き換え前のパス”にマッチできていない様子です。
パターン2は、”書き換え後のパスもマッチする”から、無限ループしていました。(error.logにて確認)
→なので、上記要件を満たした正規表現が分かればいいのかなと考えています。
2020/2/18 5:38追記
ネット検索ワードの問題だったのか、お二方からのご指摘にありました、Virtual Hostを使用した方法は存じ上げませんでした。
なお、開発環境の都合により、IPアドレスは「Apacheを導入したノードに割り振られた1個」しか使用できません。
ただし、httpd.confは私の一存で編集可能な状況です。
補足情報(FW/ツールのバージョンなど)
Apache2.4
Windows 10 Pro
フォルダ構成
C:\Apache24/htdocs (ドキュメントルート)
index.html (上記、1のURLのときは、ここを見せたい)
.htaccess (上記で試行錯誤している.htaccessファイル)
crl1/
test.crl (上記、2のURLのときは、ここにあるファイルにリダイレクトさせたい)
crl2/
test.crl (上記、3のURLのときは、ここにあるファイルにリダイレクトさせたい)
※他に必要な情報があれば、ご教示ください。
###ご回答内容を受けて追加で試したこと(2020/2/18 6:00追記)
VirtualHostを使用したやり方について、otnさん、tanatさん(ご回答順)のご指摘を受け、ネット検索をやり直して
確認しました。
■httpd.conf(追記部分)
#マルチドメイン向け設定追加
<Directory "${SRVROOT}/htdocs2">
Options FollowSymlinks Includes
AllowOverride All
AddType text/html .html
# ここを変更
Require all granted
</Directory>
<VirtualHost *:80>
DocumentRoot ${SRVROOT}/htdocs
ServerName myserver1
# Other directives here
</VirtualHost><VirtualHost *:80>
DocumentRoot ${SRVROOT}/htdocs2
ServerName myserver2
# Other directives here
</VirtualHost> ※teratailの仕様で”見出し”にならないよう、httpd.confのシャープは全角文字に置き換えています。フォルダ構成
C:\Apache24
/htdocs (ドキュメントルート1)※IPアドレス指定でアクセスされた場合(通常時)はここへ
index.html
/htdocs2 (ドキュメントルート2)※crl1.hogehoge.comドメイン指定でアクセスされた場合はここへ
同様に、Directoryタグと、VirtualHostタグを必要分セットで追加するイメージが湧いています。
自宅PC(上と同様の設定)でうまく振り分けられることを確認しました。
職場の開発環境(宛先のドメイン名などが異なりますが、やりたいことは同じ)でうまくいくか、出社後に確認します。
確認後、本日夜間~明日未明くらいに確認結果を追記いたします。
回答1件
あなたの回答
tips
プレビュー