mockroNotes -モックロノート-

ガジェットやイラスト、ワークアウトに関心を示すブログです

Apacheで特定のファイルを除外してリダイレクトさせた話

はてなブログに引っ越して独自ドメイン周りでゴニョゴニョ設定を触っていたら気づいたんですが、AdSenseの 「ads.txt」をドメインルートに設置ができないんですね。ads.txtの設置は必須ではないですがAdSenseの管理画面に 要注意 が出続けるのはちょっと気になりますよね。

↓管理画面こんなのが表示されます

はてなブログの方で対応予定はないとのことなので、ドメインルートをVPSに紐づけてはてなブログにリダイレクト、ads.txtを例外としてアクセスできるように設定しましたというお話しです。


ドメインルートのバーチャルホスト設定

対象ドメインのDNSサーバでドメインルート(www.なし)はVPSのIPアドレスに紐付けします。 はてなブログにドメインルートで独自ドメインを設定するとサブドメインの設定ができなくなる(または煩雑になる)ので、はてなブログの独自ドメインはwww.ありのサブドメインとして設定します。

次にVPS(Apache)でバーチャルホストの設定をします。対象ドメインの.confファイルの編集です。 80番と443番ポートのRewrite機能でアクセスのあったURLを書き換えます。 ads.txtはhttpとhttpsからアクセスできないとダメらしいので、それぞれads.txtを例外とします。

Rewrite機能を有効にする

ドメインルートにアクセスがあった場合のURL書き換え機能をONにします。

RewriteEngine on

RewriteCondで例外とするパターンを指定

RewriteCondは指定したパターンと一致していれば次の設定(RewriteRule)を実行します。論理否定の「!」で対象のファイル名を指定します。これによりアクセス先がads.txtでなければ次のRewriteRuleを実行することになります。

RewriteCond %{REQUEST_FILENAME} !^/ads.txt$

RewriteRuleでURLを書き換え実行

RewriteRuleでドメインルートのURLを書き換えます。

RewriteRule ^/(.*)$ https://www.SERVER_DOMAIN_NAME/$1 [R=301,L]

.confファイルのサンプル

Rewrite、RewriteCond、RewriteRuleを設定したバーチャルホストの.confファイルは以下のようになりました。Apacheをリスタートしてads.txtへのアクセスを確認しましょう。

<VirtualHost *:80>
  ServerName DOMAIN_NAME
  DocumentRoot "/YOUR_PATH"

  RewriteEngine on
  RewriteCond %{REQUEST_FILENAME} !^/ads.txt$
  RewriteRule ^/(.*)$ https://www.SERVER_DOMAIN_NAME/$1 [R=301,L]
</VirtualHost>

<VirtualHost *:443>
  ServerName DOMAIN_NAME
  DocumentRoot "/YOUR_PATH"

  RewriteEngine on
  RewriteCond %{REQUEST_FILENAME} !^/ads.txt$
  RewriteRule ^/(.*)$ https://www.SERVER_DOMAIN_NAME/$1 [R=301,L]

  SSLEngine on
  SSLCertificateFile /YOUR_PATH/YOUR_FILE
  SSLCertificateKeyFile /YOUR_PATH/YOUR_FILE
  SSLCertificateChainFile /YOUR_PATH/YOUR_FILE
</VirtualHost>

最後に

これでドメインルートへのアクセスはwww.を付けてはてなブログへ転送、ads.txtはhttpとhttpsともにVPSに設置したものにアクセスが可能になりました。 もっとシンプルな方法がありましたらコメントで教えていただけるとありがたいです。