1

我像这样在 .htaccess 中设置变量

SetEnv clubhub_path clubhub-ui

我可以用 php 在 php 中访问它

$_SERVER['clubhub_path];

但我想在 Rewrite Cond 的 .htaccess 中使用它

RewriteCond %{REQUEST_URI} ^(?!/%{SERVER:clubhub_path}/media/).+ [NC]

我在某个地方发现了 this(%{SERVER:clubhub_path}) 应该可以工作,但它没有。我尝试了 {}、%、$ 的所有组合。没有成功...

干杯

4

1 回答 1

0

SetEnv设置环境变量,所以它应该可用,%{ENV:clubhub_path}但我已经尝试过了,似乎没有工作。

但是,由于您可以使用 s 设置环境变量,RewriteRule因此可以这样编写:

RewriteRule ^ - [E=clubhub_path:clubhub-ui]

此规则匹配每个 url,但不会将其重写为 anyting 只是设置将在RewriteConds 中可用的环境变量,例如:

RewriteCond %{ENV:clubhub_path} ^clubhub-ui$

一旦它进入 php,这应该看起来完全一样。(在$_SERVER超全局中,或getenv()

更新

但是,您仍然无法%{ENV:variable}RewriteCond. 我认为如果您使用的是 apache 2.4 并且可以使用ap_expr

RewriteCond expr "! '%{REQUEST_URI}' -strcmatch '/%{ENV:clubhub_path}/media/*'"

在我的测试环境中,这似乎在做你想做的事('/clubhub-ui/media' urls 上的负匹配,但 apache2.4 仍然很新,如果你不是自己,你可能无法安装它托管。

也许带有prg参数和脚本的 RewriteMap 可以实现您的想法。

于 2012-08-12T13:23:27.403 回答