htaccessでif / then / elseを実行できますか?
-
22-07-2019 - |
質問
サブドメインに基づいて特定のコンテンツを提供するサイトがあります。したがって、同じファイルセットであり、サブページに基づいてサイトページのヘッダーと情報が変更される可能性があります。
サブドメインに基づいて異なるhtpassword認証も必要ですが、htaccessでif / thenタイプのことを行う方法に関する情報が見つかりません。
基本的に私が必要なのはこれです:
サブドメイン= 'abc'の場合 このhtpasswordファイルを使用します
サブドメイン= 'def'の場合 このhtpasswordファイルを使用します
これを実行できますか?
解決
次のようなものを試してください:
SetEnvIf Host ^abc\. HOST_ABC
SetEnvIf Host ^dev\. HOST_DEF
<IfDefine HOST_ABC>
AuthUserFile …
</IfDefine>
<IfDefine HOST_DEF>
AuthUserFile …
</IfDefine>
他のヒント
どのWebサーバーを使用していますか
複数の異なるサーバーで動作する可能性のある手法(Apacheでも動作します)は、各サブドメインに対応するディレクトリに異なる.htaccessファイルを置くことです。
それが私だったら(そして、これをやろうとは思っていなかった)、私はこうする:
- mod_rewrite を使用して、いくつかの要因(IF / ELSEをエミュレート)に応じて異なるサイトルート(/ subaまたは/ subb)への内部リダイレクトを使用します
- パブリックディレクトリでシンボリックリンクを使用しますが、.htaccessでは使用しません
so:
/sites/subdomain_a/.htaccess
/sites/subdomain_a/pub
/sites/subdomain_b/.htaccess
/sites/subdomain_b/pub
where
/sites/subdomain_a/pub == /sites/subdomain_b/pub
使用
ln -s
または同様。次に、mod_rewriteを使用して(内部的に)正しいサイトルートにリダイレクトします。 .htaccessがロードされる前にmod_rewriteが実行されると考えます。
これは、サブドメインに応じて異なる.htaccessで同じサイトファイルを効果的に提供していることを意味します。
これが役立つことを願っています、ちょっとしたハックです。
より良いものが存在するかどうかを確認します。
htaccessは指示のリストではないため、if / elseは使用できません。ただし、<!> lt; IfModule mod_rewrite.c <!> gt;のような条件付きブロックを使用する場合または<!> lt; IfDefine something <!> gt;では、要求されているサブドメインに基づいて異なるディレクティブを使用できます。どちらを使用するかわかりません...
.htaccessファイルをファイルの1レベル上に置き、<!> lt; Directory something <!> gt;を使用することもできます。サブドメインごとに異なるルールを指定しますが、サブドメインのディレクトリはすべて共有ファイルと同じディレクトリへのシンボリックリンクにします。
つまり、これはWebルートの上のディレクトリになります:
.htaccess
sitefiles
subdomain1(サイトファイルへのシンボリックリンク)
subdomain2(サイトファイルへのシンボリックリンク)
...