1

Apache サーバーを実行しているローカル マシンで Codeigniter を使用して Web サイトを開発しています。本番サーバーが Nginx を実行しているとは知りませんでした。CI を実行しようとすると、セグメントを含むきれいな URL が機能しないという問題に遭遇しました。404 ページが表示され続けます。

Nginx の経験はありませんが、試してみた Google 経由でいくつかのコード スニペットを見つけました。

私は共有ホスティングの状況にいます。つまり、構成オプションが限られています。これにより、構成インターフェースは、機能させるためにコピーして貼り付けた構成スニペットのほとんどを拒否します。

これまでのところ、私が見つけたすべてのソリューションに表示されるように見えるキーワードserver_namerootおよびを拒否することがわかりました。include

私はこの件についてほとんど知識がないので、私がやろうとしていること (つまり、クエリ文字列ではなくスラッシュで区切られた URL 部分を使用して Codeigniter を起動して実行すること) ができない場合でも可能かどうかはわかりません。前述のキーワードを使用します。

ここで私を助けるかもしれないCodeigniterで利用可能なNginx構成の「デフォルト」部分はありますか? または、私の状況はあまりにも限定的で、解決策を提供することさえできませんか? ホストに助けを求めるべきですか?

編集: URL から index.php を削除してより魅力的にしようとしているわけではないことに注意してください。まだその時点ではありません。これは一般的な URL セグメントに関するものです。つまり、Codeigniter のデフォルトの動作です。

4

1 に答える 1

2

次に、「スラッシュで区切られた URL」と言いますが、これは単なる URL であり、存在しないファイルにつながることを理解する必要があります (たとえば、site.com/controller/action/param1/value1 は「folders」/controller につながります)。 /action/param1 および "file" value1)、および tghis の状況は、apache で mod_rewrite を使用することによって解決されます。これは、存在しないファイルを指す URL を index.php を指す URL に書き換えるだけです。したがって、nginx でも同じことが必要です。

nginx 構成では、次の場所を追加する必要があります。

# for rewriting non-existing url-s to index.php
location / {
    try_files $uri $uri/ /index.php?$args;
}

#location, that enables to process *.php files thorugh php-fpm (fastcgi)
#it's possible that you already have this block configured, and don't need to change it.
location ~ \.php$ {
    try_files $uri =404;        
    fastcgi_pass 127.0.0.1:9999;
    fastcgi_index index.php;        include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_ignore_client_abort off;
}

また、それが役に立たない場合は、「configure nginx for codeigniter」をグーグルで検索するか、Webhoster サポートに「URL 書き換えが機能し始めるように構成を変更してください」と依頼してください。

于 2013-08-22T19:53:10.863 に答える