
Let's Encryptの.well-known、アドセンスのads.txtにはアクセスを許可して、それ以外は別サイトにリダイレクトしたい時ってありませんか?
良くあるのは、http://とhttps://の二つのサイトがあり、https://でブログを運営しており、http://に来たアクセスをhttps://に送りたい、でも.well-knownディレクトリ内へのアクセスはhttp://の中で処理したいって場合です。
そんな時にはRewriteのNOT条件を使います。通常の条件は、パターンにマッチすればリダイレクトとなりますが、NOT条件の場合はパターンにマッチするとリダイレクトしないとなります。
と言うわけで、論より証拠、実際の例を見ていきましょう。
.well-knownのみアクセスを許可して、それ以外は別サイトにリダイレクトする場合
RewriteEngine On RewriteCond %{REQUEST_URI} !/^\.well-known RewriteRule ^(.*)$ https://rgz95.com%{REQUEST_URI} [R=301,L]
ads.txtのみアクセスを許可して、それ以外は別サイトにリダイレクトする場合
RewriteEngine On RewriteCond %{REQUEST_URI} !^/ads\.txt RewriteRule ^(.*)$ https://rgz95.com%{REQUEST_URI} [R=301,L]
.well-known・ads.txtのみアクセスを許可して、それ以外は別サイトにリダイレクトする場合
RewriteEngine on RewriteCond %{REQUEST_URI} !^/\.well-known RewriteCond %{REQUEST_URI} !^/ads\.txt RewriteRule .* https://rgz95.com%{REQUEST_URI} [R=301,L]
まとめ
Rewriteでは条件の先頭に「!」をつけることでNOT条件になります。
「!」が先頭につかない通常の条件ではパターンにマッチすればRewriteRule実行と言う条件になりますので、逆の意味になります。「!」がついた場合はパターンにマッチしたらRewriteRuleを実行しないという流れになります。
何かの参考になれば幸いです。