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に設置したものにアクセスが可能になりました。 もっとシンプルな方法がありましたらコメントで教えていただけるとありがたいです。