How to set Apache conditional header based on URL?
This is a one-line alternative taken from documentation:
Header always set CustomHeader my-value "expr=%{REQUEST_URI} =~ m#^/special_path.php$#"
Use If
condition like this to evaluate regular expression:
<If "%{REQUEST_URI} =~ m#^/abc/?$#">
EDIT: On Apache 2.4+ following works for me:
<IfModule mod_headers.c>
<If "%{THE_REQUEST} =~ m#\s/+abc/?[?\s]#">
Header set Content-Security-Policy: "default-src 'none'; style-src 'self' 'unsafe-inline';"
</If>
<Else>
Header set Content-Security-Policy: "default-src 'none'; child-src https: *.youtube.com 'self'; connect-src 'self'; font-src 'self'; img-src 'self'; script-src https: *.ytimg.com *.youtube.com 'self'; style-src 'self';"
</Else>
</IfModule>
If you are on older Apache then use this mod_rewrite
trick:
RewriteEngine On
RewriteCond %{THE_REQUEST} \s/+abc/?[\s?] [NC]
RewriteRule ^ - [E=MYENV1:1]
RewriteCond %{THE_REQUEST} !\s/+abc/?[\s?] [NC]
RewriteRule ^ - [E=MYENV2:1]
Header set Content-Security-Policy "default-src 'none'; style-src 'self' 'unsafe-inline';" env=MYENV1
Header set Content-Security-Policy "default-src 'none'; child-src https: *.youtube.com 'self'; connect-src 'self'; font-src 'self'; img-src 'self'; script-src https: *.ytimg.com *.youtube.com 'self'; style-src 'self';" env=MYENV2