質問: 大変お世話になっております ### 拡張子.htmlを.phpのファイルにリダイレクト仕方 各サイトを参考に.htaccessのリダイレクト設定を行ったのですがリダイレクト先がどうしても レンタルサーバのルートの.phpに遷移してしまいます。 レンタルサーバーはロリポップを使用しています。 ※htmlをphpにリダイレクトするとSEOの観点から良くないとかありますが一旦ここではおいておきます。 ### 発生している問題・エラーメッセージ 以下のようにリダイレクトしてしまいます。 例) https://ドメイン/サブフォルダ/index.html ↓ https://ドメイン/index.php 本来は、以下を想定しているのですが https://ドメイン/サブフォルダ/index.html ↓ https://ドメイン/サブフォルダ/index.php ### 該当のソースコード 以下が、記述しているコードです。 ``` RewriteEngine on RewriteRule ^(.*).html$ /$1.php [R=301,L] ``` ### 試したこと 一応以下のサイトで記述の妥当性を調べられたので記述自体は間違っていないと思いたいのですが、、、 https://htaccess.madewithlove.be/ あとはRewriteBaseも設定してみましたが変わらずルートになってしまいました。 ※RewriteBaseは遷移先のURLに聞くということと相対パスでないとだめということなので以下のような記述にしてみましたが駄目でした 改めて下記の記述を試したところ、うまくいきました。 どうも301にしていたのでキャッシュが強く残っていたようです。 なるべくならRewriteBase を指定しないで実現できたらいいのですが 正規表現と$1の部分に問題があるのではないかと思うのですが ``` RewriteEngine on RewriteBase /サブフォルダ/ RewriteRule ^(.*).html$ $1.php [R=301,L] ``` ### 補足情報 ロリポップのサポートにも問い合わせ中ですが、分かる方がいましたらお願いいたします。 ※サポートから解決方法がありましたら、自己解決にて掲載いたします。 .htaccessのキャッシュ?が強すぎて一度設定するとなかなか消せないのでその対策もあればお願いしたいです。 確認ブラウザはchromeです。 ↓ キャッシュについては、試している最中は302にすることで解決しました。 301(永久的)が強すぎたようです。 ロリポップ限定ですが、アクセラレータの設定でサーバーにもキャッシュしているそうですが対象のドメインでは設定は無効になっていました。
回答: いろいろ書き方を調整した結果以下の書き方に落ち着きました。 RewriteCond の()で指定した結果をRewriteRule で使うように変更しました こう書くことでREQUEST_URIからドメイン以降のパスを取得して使えます。 ``` RewriteEngine On RewriteCond %{REQUEST_URI} ^(.*).html [NC] RewriteRule ^(.*).html$ %1.php [R=302,L] ``` ※302なので永続の場合は301に変更で試す際は302で確認してから