🐾
Apache Aliasが正しく動作せず、DocumentRootへ誤って振り分けられる問題を解決する
やりたいこと
特定のURLにアクセスがあった場合、ApacheでDocumentRootではなく、別のディレクトリにアクセスするよう設定したいと考えました。
例えば、以下のような構成を目指しました:
-
http://example.com/project
にアクセスすると、c:/dev/server_2/public/ にリクエストを振り分ける。
そのため、Apacheのhttpd.confに以下のようにAliasを記述しました。
Aliasの設定
Alias /project "c:/dev/server_2/public/"
<Directory "c:/dev/server_2/public/">
# 任意の設定(例: Require all granted など)
</Directory>
DocumentRootの設定
DocumentRoot "c:/dev/server_1/public/"
<Directory "c:/dev/server_1/public/">
# 任意の設定
</Directory>
この設定により、http://example.com/project
にアクセスした場合、意図した通り c:/dev/server_2/public/ にリクエストが振り分けられました。
問題発生
しかし、次のようなURLにアクセスした場合に問題が発生しました:
http://example.com/project/abc
- 期待する動作:
- c:/dev/server_2/public/abc にアクセスする。
- 実際の動作:
- DocumentRootに記述したディレクトリ(c:/dev/server_1/public/abc)にアクセスしてしまう。
解決方法
問題の原因は、Aliasで記述したパスのドライブ名を小文字で指定していたことにありました。
解決するには、以下のようにドライブ名を大文字で指定するだけです:
修正後のAlias設定
Alias /project "C:/dev/server_2/public/"
<Directory "C:/dev/server_2/public/">
# 任意の設定(例: Require all granted など)
</Directory>
DocumentRootの設定(変更なし)
DocumentRoot "c:/dev/server_1/public/"
<Directory "c:/dev/server_1/public/">
# 任意の設定
</Directory>
原因について
なぜドライブ名の大文字・小文字の違いでこのような挙動の差が生じるのか、理由は分かりませんでした。
しかし、設定ファイルのディレクティブは大文字小文字を区別しないが、 引数にはしばしば区別するものがあるとのことです。
参考URL
この問題について調べても、類似の事例や解説記事がほとんど見つからなかったため、困っている方の助けになればと思い、本記事を記しました。
株式会社ラグザイア(luxiar.com)の技術広報ブログです。 ラグザイアはRuby on RailsとC#に特化した町田の受託開発企業です。フルリモートでの開発を積極的に推進しており、全国からの参加を可能にしています。柔軟な働き方で最新のソフトウェアソリューションを提供します。
Discussion