我正在尝试为以 /test-live/ 开头的页面发送自定义标头
我尝试过的代码:
<If "%{REQUEST_URI} =~ m#^/test-live/#">
Header always set X-Frame-Options "SAMEORIGIN"
</If>
当我打开页面时,甚至m#^/test-live/.*#
m#/test-live/.*#
m#^\/test-live\/.*#
简单的功能也%{REQUEST_URI} == '/test-live/'
不起作用。/test-live/
Apache 是 2.4。我将其传递%{REQUEST_URI}
给浏览器,它似乎正确。并且标头在 IF 之外正确发送。
答案1
我已经在我的开发服务器 (Apache/2.4.58) 上测试了你的程序.htaccess
,它运行良好。我建议使用If / Else
块来调试:
<If "%{REQUEST_URI} =~ m#^/test-live/#">
Header always set X-Frame-Options "SAMEORIGIN"
</If>
<Else>
Header always set X-Frame-Debug %{REQUEST_URI}e
</Else>
另外尝试删除 中的其他内容.htaccess
。您还应该获取 404 响应的标头,这样您就可以在不重写的情况下进行调试。
答案2
首先,在每个目录的上下文(例如 .htaccess“^/”)永远不会匹配,您必须使用“^test-live/”。
尽管正如 MrWhite 澄清的那样,变量 %{REQUEST_URI} 包含它,而我并没有注意到这一点,但还是感谢 MrWhite 的澄清。
此外,如果您无法避免使用 .htaccess(您不是服务器的管理员),我只会前往 /test-live/ 目录并将 .htaccess 与指令放在那里以避免复杂情况。
但是如果您是 HTTPD 服务器的管理员并且可以完全避免使用 .htaccess(您应该这样做),请在虚拟主机上下文中定义:
<Directory /path/to/test-live>
Header always set X-Frame-Options "SAMEORIGIN"
</Directory>
如果 /test-live/ 在静态内容中实际上不存在,那么您应该在虚拟主机上下文中使用 <Location /test-live/> 而不是目录。