私は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を受け取ります。
あなたのブログの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で明示的な書き換え規則を使用する方法よりも推奨される方法です。
このコードを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に伝えています。
このロケーションオブジェクトをnginx.confのサーバー設定に追加します。
location /blog {
try_files $uri $uri/ /blog/index.php$is_args$args;
}
それからnginxを再起動します。
私の実装では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;
}