web-dev-qa-db-ja.com

htaccess mod_rewriteのnginxと同等のものは何ですか?

以前は、CodeIgniterのWebサイトでApacheを実行するlinode VPSを使用していました。今日、nginxをインストールしましたが、ウェブサイトのランディングページが表示されますが、URLの書き換えにhtaccessを使用している他のページが表示されません。これは私のhtaccessです、

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1

私のhtaccessのnginxイコールとは何ですか?また、codeigniterの構成とアプリケーションに変更を加える必要がありますか?? ..

Codeigniter設定のURIプロトコルについては、私は使用しています、

$config['uri_protocol'] = 'PATH_INFO';

これはnginxで動作しますか?? ..

3
Arun David

.htaccessファイルに相当するものがない(つまり、ディレクトリレベルの構成ファイルがない)ため、変更を有効にするには、メイン構成を更新し、nginxをリロードする必要があります。

上記のApache構成は、基本的に「提供されたパスが既存のファイルまたはディレクトリでない場合は、index.phpにリダイレクトし、パスを追加します」と読み取ります。

Nginxでは、_try_files_ディレクティブを使用して同じことを実行します。

_location / {
        try_files $uri $uri/ @ci_index;
}

location @ci_index{
        rewrite ^(.*) /index.php?$1 last;
}
_

Apacheとは異なり、Nginx構成では-ifステートメントは 回避するのが最善 です。

一部のセットアップでは、名前付きインデックスを回避して書き換えることができ、_/index.php_への3番目のパスとして_try_files_を使用することができます(codeigniterは_$_SERVER[$config['uri_protocol']]_からパスを取得する必要があります。

PATH_INFOの使用については、fastcgi_paramsファイル(phpのロケーションブロックに含まれているとよい)を確認し、次のようにしてください。

_fastcgi_param  PATH_INFO          $fastcgi_path_info;
_

_$config['uri_protocol'] = "REQUEST_URI"_を使用することもできます

選択したオプションについては、print_r($_SERVER)の出力をチェックして、設定されているサーバー変数とそれらが何に設定されているかを確認します(PHPロケーションブロックとfastcgi_paramsファイル)。

7
cyberx86

このリンクは、@ cyberx86のポイントに多く追加されていることを理解するのに役立つと思います。 http://wiki.nginx.org/ModuleComparisonMatrix

0
SmartMohi