2017-01-12 18 views
1

タイトルは少し誤解を招いていますが、私はより良いものとは思えません。nginx:リダイレクト時にいつも別のホストにリダイレクトする方法

私はCloudFrontの背後にあるnginxサーバーをホストしています。 nginxサーバーはCloudFrontの起源であるorigin.website.comにアクセスできます。 CloudFrontディストリビューションはwebsite.comでホストされています。

リダイレクトするたびにorigin.website.com/$uriではなくwebsite.com/$uriにリダイレクトされるようにする方法はありますか?

私はすべての拠点をカバーしようとしているが、私は特定の問題持っています:

server { 
     listen  80 default_server; 
     listen  [::]:80 default_server; 
     server_name origin.website.com website.com; 
     add_header X-server-choice "default"; 
     add_header X-heard-uri "$uri"; 

     root /var/www; 
     client_max_body_size 200M; 

     # Load configuration files for the default server block. 
     include /etc/nginx/default.d/*.conf; 

     location/{ 
       proxy_pass http://localhost:8080; 
       proxy_http_version 1.1; 
       proxy_set_header Upgrade $http_upgrade; 
       proxy_set_header Connection 'upgrade'; 
       proxy_set_header Host $host; 
       proxy_cache_bypass $http_upgrade; 
     } 
     location /blog { 
       alias /var/www/blog; 
       index index.php; 
       try_files $uri $uri/ @site_rewrite; 
     } 

     location @site_rewrite { 
       rewrite ^/blog/(.*)$ /blog/index.php?$1; 
     } 

     location ~ \.php$ { 
       fastcgi_pass 127.0.0.1:9000; 
       fastcgi_index index.php; 
       fastcgi_param SCRIPT_FILENAME /var/www/$fastcgi_script_name; 
       include  fastcgi_params; 
     } 

     location ~ /\.ht { 
       deny all; 
     } 

} 

私はwebsite.com/blogに行くたびに、それはorigin.website.com/blog/にリダイレクトします。 site_rewriteを経由することなく、location /blogを経由してtry_files $uri $uri/ @site_rewriteにリダイレクトしているようです。

アイデア?ありがとう!

+0

'ClodFrontの分布CNAMEをwebsite.com'ていますか? –

+0

@DmitryMiksIrはい。ほとんどの場合、それは動作します。それはウェブサイト上の唯一のものである/それがぼやけて –

+1

まあ、私はあなたのPHPのブログによって生成されたこのリダイレクトだと思います。 –

答えて

1

私は、あなたが書き換え対象の完全なURLを置くことができると思うつまり

rewrite ^/blog/(.*)$ $scheme://website.com/blog/index.php?$1 redirect; 
+0

はい、これはすべてうまくいきますが、私の質問で言及したように、 'try_files'で実際に書き換えが起こっていると思います。さらに証拠のために –

+0

、私はこれを試して、それは動作しませんでした –

+0

それは$ uriまたは$ uri /で一致することを意味します。代わりに別のサーバブロックを次のように置くこともできます: 'server { listen 80; server_name origin.website.com; return 301 $ scheme://website.com$request_uri } origin.website.comをすべてwebsite.comにリダイレクトします。上に貼り付けたサーバーブロック内のserver_nameからorigin.website.comを削除する必要があります。 –

関連する問題