我试图设置标题,如果来源是一个特定的网站,以解决资源冲突我有(使用Mautic托pipe在一个子域)。
如果我为任何情况添加头文件,当我尝试使用Mautic时出现500错误,但从我的网站访问的资源起作用,因此我只想在我的网站是源时设置它们。
这是我的:
RewriteEngine On #preserve HTTP(S) RewriteCond %{HTTPS} =on RewriteRule ^(.*)$ - [env=proto:https] RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ - [env=proto:http] <IfModule mod_headers.c> SetEnvIfNoCase Origin %{ENV:proto}://mysite.com ENV_SET SetEnvIfNoCase Origin %{ENV:proto}://mautic.mysite.com ENV_SET=0 Header add Access-Control-Allow-Origin %{ENV:proto}://mysite.com env=ENV_SET Header set Access-Control-Allow-Credentials true env=ENV_SET Header set Access-Control-Allow-Methods: GET, POST, PATCH, PUT, OPTIONS env=ENV_SET Header set Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token env=ENV_SET </IfModule>
据我了解,这将使标题有条件地设置的环境variables的存在,但他们被设置无论如何。 如果我删除SetEnvIf行,他们仍然设置。 我发现这表明它应该被放置在configuration而不是.htaccess,但我不知道这意味着什么。
有关如何解决这个问题的任何build议,或其他方式使其工作?
谢谢
编辑:语法用w3dk的build议更新,现在看起来像
SetEnvIfNoCase Origin "%{ENV:proto}://mysite.com" ENV_SET SetEnvIfNoCase Origin "%{ENV:proto}://mautic.mysite.com" !ENV_SET Header set Access-Control-Allow-Origin "%{ENV:proto}://mysite.com" env=ENV_SET Header set Access-Control-Allow-Credentials "true" env=ENV_SET Header set Access-Control-Allow-Methods "GET, POST, PATCH, PUT, OPTIONS" env=ENV_SET Header set Access-Control-Allow-Headers "Origin, Content-Type, X-Auth-Token" env=ENV_SET
编辑2:原来它不喜欢%{ENV:proto}部分,所以我已经将其更改为http,并为https添加另一行。 子域工作正常,头是设置,除了我得到'证书标志是'真',但'访问控制允许证书'头是'真正的'。 在控制台。 它只被设置了一次(我也尝试过“合并”,我使用的设置为允许起源;我不知道这将设置在哪里。
Header set Access-Control-Allow-Methods: GET, POST, PATCH, PUT, OPTIONS env=ENV_SET
如果该值包含空格,则应该用双引号括起来。 总是用引号括起来可能更安全一些。 您还应该省略:
在标题名称的末尾。 所以,例如:
Header set Access-Control-Allow-Methods "GET, POST, PATCH, PUT, OPTIONS" env=ENV_SET
SetEnvIfNoCase Origin %{ENV:proto}://mautic.mysite.com ENV_SET=0
更新: SetEnvIf[NoCase]
的第三个参数是一个正则expression式,所以服务器variables (例如。 %{ENV:proto}
不会被扩展 – 它们将被逐字地匹配,如果你需要匹配http
或https
,单个正则expression式,例如https?
( ?
使前面的字符可选)(但是,您的网站应该是一个或另一个,不是两个?)
要取消设置 /删除一个环境variables,你应该用一个!
(感叹号),而不是将其设置为0
(仍然设置)。 例如:
SetEnvIfNoCase Origin https?://mautic.mysite.com !ENV_SET
如果我删除SetEnvIf行,他们仍然设置。
可能是因为没有引用标题值 。 但这也可能是一个caching问题 – 所以确保所有的caching清除。
它应该放在configuration中而不是.htaccess
通过“configuration”他们可能指的是服务器configuration 。 这将是可取的(并禁用使用.htaccess
文件)。 但是,这不是这个问题的原因。