htaccess条件头集忽略了条件

我试图设置标题,如果来源是一个特定的网站,以解决资源冲突我有(使用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}不会被扩展 – 它们将被逐字地匹配,如果你需要匹配httphttps ,单个正则expression式,例如https??使前面的字符可选)(但是,您的网站应该是一个或另一个,不是两个?)

取消设置 /删除一个环境variables,你应该用一个! (感叹号),而不是将其设置为0 (仍然设置)。 例如:

 SetEnvIfNoCase Origin https?://mautic.mysite.com !ENV_SET 

如果我删除SetEnvIf行,他们仍然设置。

可能是因为没有引用标题 。 但这也可能是一个caching问题 – 所以确保所有的caching清除。

它应该放在configuration中而不是.htaccess

通过“configuration”他们可能指的是服务器configuration 。 这将是可取的(并禁用使用.htaccess文件)。 但是,这不是这个问题的原因。