在.htaccess中移除/js/index.php/x.js请求头失败,求排查错误
排查.htaccess规则失效的原因及修复方案
首先,你的规则没生效的核心原因是**<FilesMatch>匹配的是服务器上的物理文件路径**,而你的请求/js/index.php/x.js是一个通过index.php处理的虚拟路径(大概率是URL重写后的路由),服务器文件系统里根本不存在这个物理文件,所以<FilesMatch>自然不会触发。
接下来给你几个可行的修复方案,按推荐程度排序:
方案1:用SetEnvIf匹配请求URI
这是最直接的方式,根据请求的URI来匹配,不管物理文件是否存在:
SetEnvIf Request_URI "^/js/index.php/x.js$" unset_cto Header unset X-Content-Type-Options env=unset_cto
解释:
SetEnvIf检查请求URI是否完全匹配/js/index.php/x.js,匹配的话设置一个环境变量unset_ctoHeader unset指令只有在这个环境变量存在时才会执行,从而移除指定响应头
方案2:结合RewriteCond和Header unset
如果你的站点已经在用mod_rewrite,也可以用这种方式:
RewriteEngine On RewriteCond %{REQUEST_URI} ^/js/index.php/x.js$ RewriteRule ^ - [E=UNSET_CTO:1] Header unset X-Content-Type-Options env=UNSET_CTO
解释:
- 先开启RewriteEngine,然后匹配请求URI,匹配成功就设置环境变量
UNSET_CTO - 同样通过环境变量触发Header unset操作
方案3:确认mod_headers是否启用
另外,别忘了确保服务器已经启用了mod_headers模块,否则所有Header指令都不会生效。你可以通过查看phpinfo()输出,或者检查服务器配置文件(比如Apache的httpd.conf)来确认,确保有类似LoadModule headers_module modules/mod_headers.so的配置行。
额外注意事项
- 如果你的URL是通过mod_rewrite从其他路径重写过来的,要确保这些规则放在重写规则之后,这样才能匹配到最终的请求URI
- 测试前记得清空浏览器缓存,或者用curl命令测试(比如
curl -I http://mysite.loc/js/index.php/x.js),这样能直接看到响应头的变化
内容的提问来源于stack exchange,提问作者Павел Кушнеревич
相关产品推荐
相关产品推荐

