複数ドメイン管理でindex.htmlを省略リダイレクトする

掲載日
更新日

結論

httpd.conf等に以下を追加します。

<Directory "XXXX"> # XXXXに任意のリダイレクトさせたいディレクトリパス
     RewriteEngine On

     RewriteCond %{THE_REQUEST} ^.*/index.html
     RewriteRule ^(.*)index.html$ http://%{HTTP_HOST}/$1 [R=301,L]
 </Directory>

やりたかったこと

index.htmlにアクセスがあった際に、index.html無のURLにリダイレクトしたい」という、よくある設定をしたいことがありました。

ググると出て来るのは以下のような設定で、ドメインを任意のものに変更すれば、サイトが一つであったり、複数あっても今後追加予定等なければ以下で事足りると思います。

RewriteEngine on

RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://example.com/$1 [R=301,L] # example.comを任意のドメインに変更

今回自分が類似の設定をやりたかったサイトでは、以下の条件がありました。

  • 複数のドメインを持っている。
  • サイトは全て同じサーバー上にあり、CMSで複数サイトを管理している(吐き出されるファイルは同じディレクトリ配下で管理できる。)
  • 今後もサイト(ドメイン)が増える可能性がある。
  • 新たにアクセスの解析ツールを導入したが、index.htmlありのURLと無のURLが別々の集計がされている。
  • よって、全てのサイトでindex.html付きアクセスはindex.html無URLへのリダイレクトとしたい。

 

もちろんすべてのドメインで同じ記述を入れてもいいのですが、今後追加の際に絶対に「設定を忘れる→アクセス解析ツールを見た顧客の指摘を受けてリダイレクト設定を入れる」というなんともスマートじゃない事態になるのは目に見えているので、
「特定ディレクトリ配下で、アクセスしたドメインと同じドメインにリダイレクトする」みたいな置換が出来てほしいと思い、ApacheのRewriteで使える変数について調べました。

結果、HTTP_HOSTという変数があることが分かったので結論の通り、以下の書き方でサブドメインや別ドメイン対応のリダイレクトが出来るようになりました。

<Directory "XXXX"> # XXXXに任意のリダイレクトさせたいディレクトリパス
    RewriteEngine On

    RewriteCond %{THE_REQUEST} ^.*/index.html
    RewriteRule ^(.*)index.html$ http://%{HTTP_HOST}/$1 [R=301,L]
 </Directory>

色々限定的な条件の時以外不要な記述だとは思いますが、備忘録として。

参考

  • Expressions in Apache HTTP Server
     使用出来る変数の一覧が表でまとまっている公式のドキュメント。
    「Variables」配下から見られます。
記事の作成者のA.W.のアイコン

この記事を書いた人

A.W.
茨城県在住Webエンジニアです。 PHPなどを業務で使用しています。 趣味ではGoやNuxt、Flutterをやってます。

Comment