ApacheのRewriteでNOT条件を使用したい場合

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を実行しないという流れになります。

何かの参考になれば幸いです。

 

おすすめの記事