.htaccess 如何在使用htaccess模块时排除某些页面?如何排除某些URL?

hmtdttj4  于 2023-06-06  发布在  其他
关注(0)|答案(1)|浏览(178)

使用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中使用FilesFilesMatch吗?
像这样?

<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。

huwehgph

huwehgph1#

URL为“domain.com/order/...”或“domainc.om/paypal/...”
正如在注解中提到的,FilesMatch指令只匹配 filenames-这不包括文件路径或URL。看起来您试图排除以orderpaypal路径段开头的URL(而不是文件)。
您可以使用Apache <If>表达式来完成此操作。例如:

<If "%{REQUEST_URI} !~ m#^/(order|paypal)($|/)#">
    Header set .....
</If>

!~运算符是一个否定的正则表达式匹配。因此,仅当请求的URL与正则表达式不匹配时,才应用所包含的Header指令。
但是,这是否成功应用仍然取决于配置文件中可能包含的其他指令。(例如,向前端控制器重写请求?)

更新:

您也可以尝试匹配THE_REQUEST,它包含请求头的第一行,并且在重写请求时不会更改。
THE_REQUEST包含以下形式的字符串:

GET /order/checkout HTTP/1.1

例如:

<If "%{THE_REQUEST} !~ m#^[A-Z]{3,7}\s/(order|paypal)($|/)#">
    Header set .....
</If>

相关问题