【发布时间】:2021-12-16 00:48:15
【问题描述】:
我们有一个基于 php 的网站,想根据主机和请求 uri 的第一部分设置一个环境变量。该站点正在使用mod_rewrite 和 fpm 运行 apache。
我找到SetEnvIfExpr 并尝试将其添加到.htaccess:
SetEnvIfExpr "%{HTTP_HOST} =~ m#.*example.com.*# && %{REQUEST_URI} =~ m#^/de.*#" RUN_CODE=german
我想匹配所有以example.com/de开头的网址。
在我的index.php 中执行var_dump($_SERVER['RUN_CODE']); 会得到NULL。
通过反复试验,我想出了以下几点:
- 当我将最后一个请求(匹配
REQUEST_URI的请求)修改为^.*de.*时,它可以正常工作。遗憾的是,这并不是真正的解决方案,因为这可能会匹配其他不以/de开头的网址。 - 我怀疑这个问题来自
mod_setenvif和mod_rewrite的处理顺序。var_dump($_SERVER['REQUEST_URI']);只给我/de/...,但我发现将正则表达式修改为^/in.*de.*匹配。^/index.php/de.*没有。
【问题讨论】:
-
^/index\.php/de.*匹配吗? -
@Alex 不,它没有。