geo*_*rge 5 regex apache .htaccess if-statement header
我想根据URL设置不同的HTTP标头。在我的特定情况下,我希望特定的URL(例如regex ^/abc$)具有与所有其他URL 不同的头。
我正在尝试:
<IfModule mod_headers.c>
<If "%{REQUEST_URI} =~ /^\/abc$/">
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>
Run Code Online (Sandbox Code Playgroud)
但是,这似乎不起作用,日志显示:
Cannot parse condition clause: Failed to compile regular expression
Run Code Online (Sandbox Code Playgroud)
我在做错什么,如何使它起作用?
我还尝试了其他正则表达式形式m#^/abc$#,然后没有错误,但是If条件不匹配。
使用如下If条件评估正则表达式:
<If "%{REQUEST_URI} =~ m#^/abc/?$#">
Run Code Online (Sandbox Code Playgroud)
编辑:在Apache 2.4+以下适用于我:
<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>
Run Code Online (Sandbox Code Playgroud)
如果您使用的是较旧的Apache,请使用以下mod_rewrite技巧:
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
Run Code Online (Sandbox Code Playgroud)