ワードプレスをインストールされると htaccess は自動的にみな index.php が読むように、存在していないディレクトリまたはファイルであれば index.php 経由でテーマフォルダ内の 404.php が表示されるようになされているかと思うのですが、現在は下記の2点+1のいずれかが当てはまるでしょうか?
・テーマフォルダ内に 404.php ファイルがない
・.html ファイルは存在している
+ .html ファイルが存在する場合、それを削除する予定はない
テーマフォルダに404.phpファイルはあります。
ErrorDocument 404 /wp/wp-content/themes/テーマ/404.php
を指定してみたのですが動作しませんでした。
.htmlファイルは存在しません。
パーマリンク設定を変更し、ディレクトリや拡張子のページを全て
/?p=123
のように変更しました。
この変更で、存在しないページが全てサーバーの404ページが出るようになったので、
上記のようなリダイレクト処理をワードプレスのhtaccessの頭に記述しました。
拡張子が.htmlファイルのリダイレクトは正常にされるのですが、
それ以外の存在しないURLがそのままのURLでトップページが表示されています。
なるほどです。
まず一番最初の htaccess 状態にしていただくと、html ファイルは見つからないので 404.php にて表示されますよね。
この 404.php をトップページへリダイレクトさせる内容にすると html 問題は解決するでしょうか。
次に、存在しないクエリページを開く場合、アドレスがそのままで表示内容がトップページになるのを、404.php の内容表示ということでよろしいでしょうか。
それも同じく最初の状態で 404.php が表示されると思うのですがどうでしょうか。
htaccess を初期の状態にされて、拡張子が html の場合のみ 404.php が内容表示ではなくトップへ移動させる働きをする、というものであれば
・function.php 内でリクエストが html で来た場合、トップページへリダイレクトさせる
・404.php にて拡張子が html のリクエストだった場合 Javascript でリダイレクトさせる
といった方法がとれると思うのですがいかがでしょうか。
ほとんどのページがサーバーの404ページの状態になっていたので、
htaccessの先頭で行ってみました。
ずっと調べていたら
RewriteCond %{REQUEST_URI} (^/.*/)
でディレクトリページの回避ができました。
ありがとうございました!
クエリ処理されているのだけれども、見ためはディレクトリを指定してるので、まるでデフォルトの「index.html」が読みだされているように見える事象について、というお話だったのですね。
失礼いたしました。以後気を付けます。