我在 .htaccess 中像这样设置变量
SetEnv clubhub_path clubhub-ui
我可以在 php 中访问它
$_SERVER['clubhub_path];
但我想在重写 Cond 的 .htaccess 中使用它
RewriteCond %{REQUEST_URI} ^(?!/%{SERVER:clubhub_path}/media/).+ [NC]
我发现这个(%{服务器:clubhub_path})应该可以工作,但它没有。我尝试了所有带有 {}、% $ 的组合。没有成功...
干杯
SetEnv
设置环境变量,因此它应该在%{ENV:clubhub_path}
中可用,但我已经尝试过并且似乎不起作用。
但是,由于您可以使用RewriteRule
设置环境变量,因此您可以像这样编写它:
RewriteRule ^ - [E=clubhub_path:clubhub-ui]
此规则匹配每个 url,但不会将其重写为 anyting 只是设置一个环境变量,该变量将在RewriteCond
中可用,例如:
RewriteCond %{ENV:clubhub_path} ^clubhub-ui$
一旦它到达 php,这应该看起来完全相同。(在$_SERVER
超全局或getenv()
)
更新
但是,您仍然无法在RewriteCond
的右侧使用%{ENV:variable}
。我认为如果您使用的是apache 2.4并且可以使用ap_expr,则执行此操作的唯一方法
RewriteCond expr "! '%{REQUEST_URI}' -strcmatch '/%{ENV:clubhub_path}/media/*'"
在我的测试环境中,这似乎正在做你想要的('/clubhub-ui/media' url 上的负匹配,但 apache2.4 仍然很新,如果你不是自托管的,你可能无法安装它。
也许使用prg
参数和脚本重写地图可以实现您的想法。