基于与 .htaccess 中的 %{REQUEST_URI} 进行比较的 IF 语句不起作用

基于与 .htaccess 中的 %{REQUEST_URI} 进行比较的 IF 语句不起作用

我正在尝试为以 /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/> 而不是目录。

相关内容