同名のファイルがある場合はどっちが優先される!? 拡張子の違うファイルを作って開発環境と本番環境で試してみた!

※当サイトではアフィリエイト広告を利用しています。

備忘録

以前書いた記事で、開発環境と本番環境での同名のファイルがあった場合の.htaccessの挙動が気になって。

基本的にわたしはwebサイト作るときはhtmlかphpかで統一していて、同名のファイルはそもそも作れないので気にしたことがなかったのですが、ふと思い立って、同名で拡張子の違うファイルがあったらどうなるのかなと思って試してみたんです。

試してみたが運の尽き、開発環境では予想通り動いたんですが、本番環境でリダイレクトループにはまり……。試行錯誤にめちゃくちゃ時間がかかったので、備忘録として残しておきます。

デフォルト状態

ローカルの開発環境はXAMPPを使っています。本番環境(サーバー)はロリポップ

まず、.htaccessになにも設定していない状態。

XAMPP

test.phpもtest.htmlも両方あろうが片方なかろうが、testにアクセスしたときは404エラー。

ロリポップ

  • test.htmlのみあるとtestにアクセスしたとき、test.htmlが表示される
  • test.phpのみあるとtestにアクセスしたとき、test.phpが表示される
  • test.htmlとtest.php両方あるとtestにアクセスしたとき、test.htmlが優先して表示される

そもそも、もともとの状態で差があることが発覚。

.htaccessにphpで拡張子を表示しないように設定した場合

testにアクセスしたとき、test.phpを優先して表示したいので.htaccessに下記を記入。

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

RewriteCond %{THE_REQUEST} \.php\ HTTP
RewriteRule ^(.*)\.php$ /$1 [R=301,L]
RewriteRule ^(.*)\.html$ /$1.php [R=301,L]

上のコードの詳しい内容は下記記事に書いています。

XAMPP

test.htmlにアクセスすると、test.phpへリダイレクトし、testへリダイレクト。
このときtestはtest.phpが表示されている。

予想通りの挙動。

ロリポップ

test.htmlにアクセスすると、test.phpへリダイレクトするものの、その後、testとtest.phpでリダイレクトループになる。

コードを減らしてみる

RewriteCond %{THE_REQUEST} \.php\ HTTP
RewriteRule ^(.*)\.php$ /$1 [R=301,L]
RewriteRule ^(.*)\.html$ /$1.php [R=301,L]

これだと、test.html→test.php→test(test.html)に飛ぶ。

testでtest.phpが表示されるように付け足す

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

RewriteCond %{THE_REQUEST} \.php\ HTTP
RewriteRule ^(.*)\.php$ /$1 [R=301,L]
RewriteRule ^(.*)\.html$ /$1.php [R=301,L]

ひとまずtest.htmlからtest.phpへは飛ぶ。
飛ぶけどそのあとtestとtest.phpでリダイレクトループになる。

いろいろいじってみたんですが、同名ファイルがあってtestでtest.phpを優先表示する方法が見つからず……。(そもそもtest.html削除したら済む話なんですけどね)

トップページ(https://example.com/)に関してはDirectoryIndexつかえば、https://example.com/ でindex.phpを優先的に表示できるんですが、 https://example.com/indexになると結局リダイレクトループになるという……。

わたしも詳しくはないので調べてみたんですが、はっきりとは分からず……。
おそらくサーバー側の設定に原因があるのかなというところに落ち着きました。

結論

ちょっと気持ち悪いなと思いながら、不要なファイルは消したらいい話なので、これ以上時間をかけるのももったいないし、そういうものなんだろうなということで。

結論! 同名のファイルがある場合は環境によって優先される拡張子が違う。
いらないファイルは消しましょう! 同名ファイルは作らないのが吉!!
開発環境で上手くいったから本番環境でも上手くいくとは限らないという例として、なかなか勉強になりました。

コメント

タイトルとURLをコピーしました