WordPressのルートフォルダにHTMLファイルは置かない方がいいかも(REQUEST_FILENAMEの謎)
この記事はさくらインターネットでスタンダードプランを契約中のサーバーでの話です(2022年8月4日時点)。
カテゴリー的には旧サーバーの部類になります。WebサーバーはApache/2.4.54。
ご存じのようにWordPress導入で、.htaccessファイルに以下のような記述が追加されます。
WordPressをインストールした/直下には、index.phpのほか、readme.htmlがあるかと思います。
https://あなたのドメイン/readme/
でアクセスしてみてください。readme.htmlが表示されます。
a.htmlやb.txtを配置しても同様です。
https://あなたのドメイン/a/→a.htmlが表示される。
https://あなたのドメイン/b/→b.txtが表示される。
c.phpは「要求された URL はこのサーバーで見つかりませんでした。」とエラーになります。
https://あなたのドメイン/c/
REQUEST_URIはaのはずですよね。REQUEST_FILENAMEはaでファイルなしかと思いきやa.htmlが見つかるってことです。
つまり、/a/は、a.html、a.txtを探し、ファイルが存在した場合、REQUEST_FILENAMEに設定されてしまうってことです。
apacheの挙動なので、ユーザーサイドで何かするのは難しいと思います。
nginxを利用したサーバーでは、https://あなたのドメイン/readme/にアクセスしても、wordpressの404ページに遷移してくれます。さくら側の挙動はapacheの不具合だと思われます。
WordPress内で設定するアーカイブやタグ、カテゴリと一致してしまうファイルを置いてしまうと誤動作するってことになると思います(試していません)。要注意ですね。
見方を変えると、これは.htmlを隠してアクセスするちょっとイケてる?公開方法に活用できるかもしれませんね。(不具合が修正された場合、404ページに遷移してしまうリスクあり)
カテゴリー的には旧サーバーの部類になります。WebサーバーはApache/2.4.54。
ご存じのようにWordPress導入で、.htaccessファイルに以下のような記述が追加されます。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
- RewriteRule ^index\.php$ - [L]
/index.phpの場合、この行で終了する命令です
- REQUEST_FILENAMEは、apacheサーバー側で認識したフルパスのファイルです。
The full local filesystem path to the file or script matching the request, if this has already been determined by the server at the time REQUEST_FILENAME is referenced.
mod_rewrite - RewriteCond %{REQUEST_FILENAME} !-f
REQUEST_FILENAMEがファイルだった場合、ここで終了します。
- RewriteCond %{REQUEST_FILENAME} !-d
REQUEST_FILENAMEがディレクトリだった場合、ここで終了します。
- RewriteRule . /index.php [L]
実際のファイルがない、ディレクトリがない、この条件を満たした場合、index.php(WordPress本体)を呼び出し、終了します
- WordPressで追加された.htaccessの記述の意味、なんとなくわかった感じですよね。
apacheが判断して格納するREQUEST_FILENAMEはそういう処理だったんですね
WordPressをインストールした/直下には、index.phpのほか、readme.htmlがあるかと思います。
- /index.php
- /readme.html
https://あなたのドメイン/readme/
でアクセスしてみてください。readme.htmlが表示されます。
a.htmlやb.txtを配置しても同様です。
https://あなたのドメイン/a/→a.htmlが表示される。
https://あなたのドメイン/b/→b.txtが表示される。
c.phpは「要求された URL はこのサーバーで見つかりませんでした。」とエラーになります。
https://あなたのドメイン/c/
https://あなたのドメイン/a/→a.htmlが表示される
REQUEST_URIはaのはずですよね。REQUEST_FILENAMEはaでファイルなしかと思いきやa.htmlが見つかるってことです。
つまり、/a/は、a.html、a.txtを探し、ファイルが存在した場合、REQUEST_FILENAMEに設定されてしまうってことです。
apacheの挙動なので、ユーザーサイドで何かするのは難しいと思います。
まとめ:多分バグかも、見方を変えると何か裏技的な方法に?
nginxを利用したサーバーでは、https://あなたのドメイン/readme/にアクセスしても、wordpressの404ページに遷移してくれます。さくら側の挙動はapacheの不具合だと思われます。
WordPress内で設定するアーカイブやタグ、カテゴリと一致してしまうファイルを置いてしまうと誤動作するってことになると思います(試していません)。要注意ですね。
見方を変えると、これは.htmlを隠してアクセスするちょっとイケてる?公開方法に活用できるかもしれませんね。(不具合が修正された場合、404ページに遷移してしまうリスクあり)
- 初期費用0円(2022年8月4日に撤廃)
- 安定したサイト運営が可能(CPU/メモリ リソース保証 6コア/8GB〜)
- 契約中は独自ドメインつき 独自ドメイン永久無料特典があります
- 最大10日間無料で、サーバーのお試し利用ができます
- ディスクキャッシュも高速 NVMe SSDを採用(300GB〜)
- 大量アクセスでも安心 転送量は無制限
【このカテゴリーの最新記事】
-
no image
-
no image
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/11530382
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック