さまざまなWebプロジェクトでは、ユーザーのサブドメインをその場で整理するという課題が生じます。
nginxを使用する場合、次の構成が
役立ちます。
サーバー{
80を聞きます。
server_name example.com * .example.com;
場所/ {
ルート/var/www/example.com/$subdomain;
index index.html index.php;
}
$サブドメイン ""を設定します;
if($ host〜* ^([a-z0-9-\。] +)\。example.com $){
$サブドメイン$ 1を設定します。
}
if($ host〜* ^ www.example.com $){
$サブドメイン ""を設定します;
}
}
それ自体では、新しいものではなく、すでにハブで
言及されていました それでも、ユーザーのサブドメインの書き換えを整理する問題は解決されていません。手元のタスクは少数のユーザーのサブドメインの
さまざまな書き換えの整理であるという事実に注意を喚起します。特定のサブドメインに書き換えルールを適用することの主な問題は、2つのif 1つ目はサブドメインを明示的に指定することであり、2つ目はルール自体の一部です。 例:
if(!-e $ request_filename){
書き換える^(。+)$ /index.php?q=$1 last;
}
残念ながら、現時点では、nginxはネストされたif構文またはそれらの「AND」演算子の使用を許可していません。 この方法では、ちょっとしたトリックが必要になります。nginxconfigsを含むフォルダーに次の内容のchecks.confファイルを作成します(Linuxでは/ usr / local / etc / nginxがあります。/etc/nginxの疑いがあるため)。
set $ f "| f";
set $ e "| e";
set $ d "| d";
if(!-f $ request_filename){
set $ check $ check $ f;
}
if(!-e $ request_filename){
set $ check $ check $ e;
}
if(!-d $ request_filename){
set $ check $ check $ d;
}
$ check $サブドメイン$ checkを設定します。
彼は何をしていますか? 実際、現在のサブドメインの名前を$ check変数に入れ、クエリの最後に「フラグ」を追加します(つまり、-fがtrueの場合、-fが追加され、-eがtrueの場合、| eなどが追加されます)。 )次に、サブドメインでのこのファイルの使用を整理し、構成ファイルに次の行を追加します。
場所/ {
ルート/var/www/example.com/$subdomain;
index index.html index.php;
example.com/*.confを含めます。
}
nginx configフォルダーに
example.comディレクトリーを作成します。 各サブドメインの書き換えルールを保存します(ファイルごとに1つ、ファイルが存在しないため、このサブドメインでは書き換えが不要です。例として、DokuWikiが実行されているdocsサブドメインの同様のファイルの内容を示します。
if($ subdomain = "docs"){
リライト^(/)_ media /(.*)$ 1lib / exe / fetch.php?media = $ 2 last;
リライト^(/)_ detail /(.*)$ 1lib / exe / detail.php?media = $ 2 last;
rewrite ^(/)_ export/(►^/†+)/(.*)$ 1doku.php?do = export_ $ 2&id = $ 3 last;
}
サービス/checks.confを含める;
if($ check〜* ^ docs。* [f]。* $){
rewrite ^(/)(。*)?(。*)$ 1doku.php?id = $ 2&$ 3 last;
書き換え^(/)$ $ 1doku.php最後;
}
ファイル自体は2つの部分で構成されています。 最初の部分(インクルード前)は、無条件の書き換えで構成されます。 ユーザードメイン構成自体にそれらを取り出すこともできますが、この場合、すべての卵を1つのバスケットに格納する方が便利
です。 ) 明らかに、
-eタイプのチェックが必要な場合、正規表現の1文字を置き換えるだけで十分です。残念ながら、この方法では、自動ユーザーサブドメインを使用するときの別の問題を解決できません。つまり、基本認証を通じてサイトの特定のフォルダーへのアクセスを制限します.htaccessの類似)。 これは、if.PS演算子内でこのようなルールが設定されているlocationディレクティブが受け入れられないという事実によるものです。これはHabrに関する私の最初の記事です。