使用htaccess
:
<IfModule mod_headers.c>
Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-eval';
style-src 'self' 'unsafe-inline'; frame-src 'self' *.youtube.com; img-src * data:; media-src * data:;
report-uri /logging"
</IfModule>
但是,我需要排除所有包含Paypal脚本的页面,因为Paypal写入DOM,这会被Content-Security-Policy阻止。
现在使用htaccess
,我尝试使用条件排除CSP,因此Paypal不再被阻止。
如何排除以/order
和/paypal
开头的URL?
域示例:
https://www.example.com/order/checkout
https://www.example.com/paypal
https://www.example.com/paypal/check
我可以在IfModule
中使用Files
或FilesMatch
吗?
像这样?
<IfModule mod_headers.c>
<FilesMatch "\(order|paypal)">
Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; frame-src 'self' *.youtube.com; img-src * data:; media-src * data:; report-uri /logging"
</FilesMatch>
</IfModule>
但我需要的oppsite,如果不FilesMatch。
同时,I found这个负先行正则表达式排除例如“order”:^((?!order).)*$
-对于“order”和“paypal”,这个正则表达式应该可以工作:^((?!order)(?!paypal).)*$
我试过了,但似乎不起作用:
<IfModule mod_headers.c>
<FilesMatch "^((?!order)(?!paypal).)*$">
Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; frame-src 'self' *.youtube.com; img-src * data:; media-src * data:; report-uri /logging"
</FilesMatch>
</IfModule>
我也试过^(?!.*(order|paypal)$).*$
,但没有成功。它在Regex 101中显示为有效,但似乎不适用于Apache的htaccess。
1条答案
按热度按时间huwehgph1#
URL为“domain.com/order/...”或“domainc.om/paypal/...”
正如在注解中提到的,
FilesMatch
指令只匹配 filenames-这不包括文件路径或URL。看起来您试图排除以order
或paypal
路径段开头的URL(而不是文件)。您可以使用Apache
<If>
表达式来完成此操作。例如:!~
运算符是一个否定的正则表达式匹配。因此,仅当请求的URL与正则表达式不匹配时,才应用所包含的Header
指令。但是,这是否成功应用仍然取决于配置文件中可能包含的其他指令。(例如,向前端控制器重写请求?)
更新:
您也可以尝试匹配
THE_REQUEST
,它包含请求头的第一行,并且在重写请求时不会更改。THE_REQUEST
包含以下形式的字符串:例如: