

NginxでURLパスを静的ファイルにマッピングする設定を行っています。

`http://www.test.com/foo/` とアクセスしたら、実際は、  
`http://www.test.com/foo.php` が実行されるイメージです。

設定としては、`locaion{index..}` という方式で行っています。  
上記の例だと以下のような設定をしてます。

[code]

    location /foo {
       index foo.php
    }
    
[/code]

## 意図しない動作

仕様ではindexディレクティブは、指定されたファイルへ内部リダイレクションされるとあります。しかし、実際は外部リダイレクション(301 Moved
Permanently)され、ブラウザに戻ってきてから、再度、サーバに要求を飛ばす動作になってしまっています。

そのため、POSTで要求を投げた場合、indexディレクティブにより、外部リダイレクションされ、それを受けたブラウザは、GETでリダイレクト(ほとんどのブラウザの仕様)するため、サーバはGETでしか認識できないのと、その際、POSTのパラメータが欠落してしまいます。

## やりたいこと

`http://www.test.com/foo/` にアクセスし、 `http://www.test.com/foo.php` と実行させたい。  
実現できれば、`location{index}` 形式でなくてもよい。  
とにかくブラウザに301(302, 303, 307)でリダイレクトされるのをやめたい。


CC BY-SA 3.0
2016-08-01T06:50:33.587
27996
2017-09-25T02:47:36.010
2016-08-01T11:27:48.977
8000
17352
question
nginx
indexディレクティブを使うとリダイレクトが発生してしまう


rewrite を使うといいと思います。

[code]

    location /foo {
        rewrite /foo /foo.php;
    }
    
[/code]


CC BY-SA 3.0
2016-08-02T16:11:52.290
28030
2016-08-02T16:11:52.290
4603
27996
answer