質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

Q&A

解決済

1回答

2183閲覧

wordpressでカスタム投稿だけパーマリンクにスラッグを設定すると404エラーになる

gooooma

総合スコア17

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

0グッド

0クリップ

投稿2021/11/25 01:20

エックスサーバーにてインストールしたWordpressにプラグイン「Custom Post Type UI」を使ってカスタム投稿を作成しています。
観光地紹介の記事になるので、カスタムフィールドを設定し、WP ALL IMPORTERを使ってCSVで記事を50件ほど流し込みました。一旦表示されるかを確認してから、流し込んだ記事にスラッグを設定していなかったことに気が付き、スラッグを設定してみたところ404 Not Foundで記事が表示されません。

Wordpressをインストールしたディレクトリの構造が少し特殊な状況のため、その影響なのか…と疑ってもいるのですが、ネットで見つけた対応策をやるだけやってみたのですがどうにならず…お知恵を貸していただければと思い投稿させていただきました。

Wordpressを入れたサーバーのディレクトリ構造

wordpressで構築されたサイトがルート直下で稼働しております。同一ドメインでサイトをリニューアルすることになり、リニューアル用の新しいWPを「public_html」の中に入れました。

public_html
└ .htaccess
└ index.php
└ wp ←現在はこのフォルダ内のwordpressがhttps://hogehoge.jp/として稼働中
└ cms ←このWPのパーマリンクがおかしくなっている

現在の状態

(1)パーマリンク設定
→ カスタム構造 https://hogehoge.jp/cms/%year%/%monthnum%/%day%/%post_id%/ に設定

通常のPOST → https://hogehoge.jp/cms/2021/10/30/70/ で表示される。スラッグを設定しても表示される。

カスタム投稿名を「custom」、タイトルを「テスト投稿」、スラッグを「test」とした記事
https://hogehoge.jp/cms/custom/テスト投稿 → 表示される
https://hogehoge.jp/cms/custom/test/ → 表示されない

(2)パーマリンク設定
→ 基本の https://hogehoge.jp/cms/?p=123 に設定

通常のPOST → https://hogehoge.jp/cms/?p=70 … 表示される

カスタム投稿 → https://hogehoge.jp/cms/?custom=test … 表示される

基本の形であれば表示されるようです。

試してみたこと

  • パーマリンク設定を開き、特に何も触らずに「変更」ボタンを押す

→ 大体がこれで直るはずですが、改善されず。

  • .htaccessの記述の見直しと更新。

下記のようになっており特におかしなところは見当たりませんでした。

<IfModule mod_rewrite.c> RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase /cms/ RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /cms/index.php [L] </IfModule>
  • flush_rules関数を実行

functions.phpに下記を記述してサイトを更新してみました。特に改善されず。

global $wp_rewrite; $wp_rewrite->flush_rules();
  • あとからスラッグをつけたから表示されないのか?と思い、カスタム投稿の記事を一旦すべて削除。CSVで最初からスラッグありの状態で新規登録

→ 新しく記事は生成されており、DBのguidも「https://hogehoge.jp/cms/custom/test/」とスラッグ入りのURLになっているが404 Not Foundのまま

  • CSVを使わず、手動で作成した記事で試す

→ こちらもスラッグなし状態では表示されるものの、スラッグを入れると404エラー

出来る範囲のことはやったのですが一向に改善されず…お手上げ状態です。
おかしいのはカスタム投稿のみで、投稿や固定ページについては普通にスラッグが生きています。
(タクソノミーも作っていますが、そちらまではまだ確認していません)
サーバーでmod_rewriteが許可されているか確認しましょう、という旨の記事もwebでは出てきますが、エックスサーバーなので多分そこは普通に動くはずですし…

ルートディレクトリで稼働しているWPの影響なのでしょうか…
こちらについては私の方で作成したサイトではないため出来れば触らずにエラーの解消をしたいと考えています。
どうぞお力をお貸し頂ければ幸いです。

念のため、ルート直下に置いてあるhtaccessの中身も記載しておきます。

SetEnvIf Request_URI ".*" Ngx_Cache_NoCacheMode=off SetEnvIf Request_URI ".*" Ngx_Cache_StaticMode # Allow acces to wp-admin/admin-ajax.php <Files admin-ajax.php> Satisfy any Order allow,deny Allow from all </Files> <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^(.*)xmlrpc.php$ "http\://0.0.0.0/" [R=301,L] RewriteRule ^osusume/20503 /osusume/21220 [R=301,L] </IfModule> # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress

宜しくお願いいたします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2021/11/25 08:15

2つの WordPress が入っている状態ですね。 期待する以外の WordPress で処理されている可能性はありませんか? 404 エラーが出ている URL は、webサーバのログを確認すると wp ディレクトリと cms ディレクトリのどちらの WordPress で処理されているでしょうか?
gooooma

2021/11/25 09:27

ありがとうございます。 エラーログの方を確認しましたが、404 Not Found.が出ているページについてのエラーログは特に記載されていませんでした。 一件だけ下記のようなエラーが出ていますが、こちらは関係あるでしょうか? [access_compat:error] AH01797: client denied by server configuration: /home/fugafuga/hogehoge.jp/public_html/uploads/index.php ※FTPで確認してみると「public_html」の直下に「uploads」というディレクトリはありましたが、index.phpというファイルは見当たりません。何故かこのディレクトリにも.htaccessが設置されています。 こちらのディレクトリについては私が設置したものではなく…どういう状態で動いているのかさっぱりです… やはり今構築中のwordpressを一旦初期ドメインの直下に移動させて検証してみるのが良いでしょうか。
yuki84web

2021/11/26 03:59

パーマリンク設定画面で何も変更せずに保存する作業はしましたか?
gooooma

2021/11/26 04:08

試してみたことの一つ目に記載した通り、実行済です。
guest

回答1

0

自己解決

一旦プラグインをすべて停止し、テンプレートを「Twenty Twenty」に戻してみたところ、スラッグ付きのURLで記事が表示されました。
オリジナルテーマに戻すとまた404エラーになったので、テンプレートに問題がある可能性が高そうだと判断しました。

必要最低限、<?php wp_head(); ?><?php wp_footer(); ?>のみを記述したheader.phpとfooter.php、空のfunctions.php、プレーンなindex.phpというテンプレートに変更し、再度パーマリンク設定ページから「変更」ボタンを押したところオリジナルテーマでもカスタム投稿ページが表示されるようになりました!

結局のところ原因らしい原因は見つかってないのですが、プラグインを一つずつ元に戻す+オリジナルテーマも段階的に元に戻して検証していこうと思います。

有難うございました!

投稿2021/11/26 05:14

gooooma

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問