web-dev-qa-db-ja.com

URL内のindex.phpを削除する方法?

私はwordpressをサブディレクトリ(blog)にインストールしました。ルートディレクトリにMagentoをインストールしました。ファイルディレクトリは次のようになります。

app
downloader
includes
media
....
blog/wp-admin

私のサーバーは nginx です。 URLをwordpressに設定すると パーマリンク設定 に:

http://www.example.com/blog/index.php/sample-post/ 

…すべての投稿は利用可能です。今度はそのURLからindex.phpを削除します。どうすればいいの?カスタム構造をに設定すると…

http://www.example.com/blog/sample-post/

…URLはWordPressによって解決されず、404を受け取ります。

3
stack2013110

あなたのブログのNginxのサーバー設定に問題があると思われます。/blog /の場所の規則、特にtry_filesが間違っている可能性があります。これは次のようになります。

location /blog/ {
     try_files $uri $uri/ /index.php$is_args$args;
}

これはNginxに要求されたリソースを見つけようとする順番を伝えます。まずURLから正確なオブジェクトを見つけようとします。それが存在しない場合は、そのオブジェクトをディレクトリとして見つけようとします。それが存在しない場合は、存在する場合は引数またはクエリ文字列とともにindex.phpに要求を渡します。 index.phpがWordPressのメインハンドラにあるので、これはWordPressがあなたの書き換え規則に基づいてあなたが要求したページまたは投稿を見つけることをトリガーします。

この設定の素晴らしいところは、Nginxのルールを変更しなくても、パーマリンク構造をWordPressがサポートするものに変更できることです。これは、Nginxで明示的な書き換え規則を使用する方法よりも推奨される方法です。

3
Christiaan

このコードをfunctions.phpファイルに配置してください。

   add_filter( 'got_rewrite', '__return_true', 999 );

更新:

got_mod_rewrite() functionは、現在のサーバーがApacheであるかどうかをチェックし、 Apache_mod_loaded() functionを使用します。 nginxを使っているのでfalseを返します。だからwordpressはurlにindex.phpを追加します。

got_rewrite filterを使用することで、サーバーで書き換えたことをwordpressに伝えています。

1
Giri

このロケーションオブジェクトをnginx.confのサーバー設定に追加します。

location /blog {
    try_files $uri $uri/ /blog/index.php$is_args$args;
}

それからnginxを再起動します。

Wordpressフォルダへのシンボリックリンク

私の実装ではwordpressフォルダへのシンボリックリンクを使用していますが、そのシンボリックリンク内の実際のフォルダにアクセスしようとすると、まだ複雑な問題があることがわかりました。これらのフォルダは3つあり、try_files $uri/の部分はここで失敗するようです(少なくとも私にとっては)ので、try_filesによる操作からそれらのフォルダを手動で除外してしまいました。同様の問題がある場合は、下記の場所ブロックを試してください。

location ~* \/blog\/(?!.*(wp-admin|wp-content|wp-includes)).* {
    try_files $uri $uri/ /blog/index.php$is_args$args;
}
1
Chris H.