2016-04-24 14 views
0

私はいくつかのPHPサブドメインを設定しています。私はアプリケーションの別の部分に各サブドメインを送信しようとしています。私は私の/etc/hostsにこれらのサブドメインのための正しいマッピングを持っている、と私はnginxのエラーログにこのエラーが表示さnginxのサブドメインのマッピングが機能していません

map $http_host $app { 
    'api.id.dev'  'api/public'; 
    'www.id.dev'  'www/public'; 
} 

server { 
    set $base /Users/dev/www/id/apps; 
    server_name ~^(?<subdomain>.+)\.id\.dev$; 
    index index.html index.htm index.php; 
    root $base/$app; 
    charset utf-8; 
    location/{ 
     try_files $uri $uri/ /index.php?$query_string; 
    } 
    access_log off; 
    client_max_body_size 100m; 
    location ~ \.php$ { 
     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index index.php; 
     include fastcgi_params; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     fastcgi_param APP_ENV local; 
    } 
} 

server { 
    server_name id.dev; 
    rewrite^http://www.id.dev$request_uri permanent; 
} 

ここで(それが sites-enabledディレクトリにあります)のように id.confに見えると呼ばれるものを私のファイル、です
2016/04/24 00:26:32 [error] 5691#0: *5 directory index of "/Users/dev/www/id/apps//" is forbidden, client: 127.0.0.1, server: ~^(?<subdomain>.+)\.id\.dev$, request: "GET/HTTP/1.1", host: "api.id.dev" 

これは、ホストが存在し、confファイルを読み取っていることを示していますが、httpホストと正しいディレクトリが一致していないようです。 (また、これらのサブドメインのディレクトリにindex.phpファイルがあります)

ここで問題は何ですか?私は同じことをやっている別の設定ファイルを持っており、それは動作しています。実際に、私は別のタブをロードし、それらの他のサイトをロードし、それがこのプロジェクトのために動作していないようです(と私は、ファイル・パスにすでに回のトンを確認した)ことができます

+0

サブドメインが存在しないベースケースがありますか?例えば「http:// id.dev」が要求される。 –

+0

@BurhanKhalidこれは最後に書き直しで処理する必要があります。私はちょうどそれをテストし、適切にリダイレクトしますが、それでも正しくマップされないので、無効なディレクトリにアクセスしようとします。= / – charmeleon

答えて

0

私はそれを試しました。変数$appmapディレクティブに同じ変数名を使用している他のファイルと競合していることが判明しました。

map $http_host $name { 
    'api.id.dev'  'api/public'; 
    'www.id.dev'  'www/public'; 
} 

が、私は、端末内 sudo nginx -s reloadとnginxの再ロード、 root $base/$name;root $base/$app;を変え、今では完璧に動作します:私は、最初のマップでは、 id.conf$nameに変数の名前を変更しました。

0

私はあなたのマッチングを考えますが正しく動作しない場合は、次を試してください:

set $domain $host; 

if ($domain ~ "^(.[^.]*)\.dev$") { 
    set $domain $1; 
    set $servername "${domain}.dev"; 
} 

if ($domain ~ "^(.*)\.(.[^.]*)\.dev$") { 
    set $subdomain $1; 
    set $domain $2; 
    set $servername "${subdomain}.${domain}.dev"; 
} 
関連する問題