regex - htaccess - 如何比较环境变量 - 检查2个环境变量是否相同
问题描述
如果 2 个自定义环境变量的值不相同,我需要进行重定向。
在网络上搜索任何方法,或者 StackOverflow 一直令人沮丧.. 已经研究了几个小时,但没有发现任何可以做这个简单的事情。
这是我到目前为止所拥有的,但它根本不起作用:
RewriteCond %{ENV:HREFBASE} !^$
RewriteCond %{ENV:PATHSTEM} !^%{ENV:HREFBASE}$
RewriteRule ^ %{REQUEST_SCHEME}://%{HTTP_HOST}/%{ENV:HREFBASE}%{REQUEST_URI} [R=302,L]
明显错误的部分是:
%{ENV:PATHSTEM} !^%{ENV:HREFBASE}$
我尝试了几种方法,但似乎没有任何效果。
任何投入我们都会以实物形式表示赞赏和奖励;提前致谢。
更新
我什至试过这个:
RewriteCond %{ENV:HREFBASE} ^$
RewriteRule ^ - [L]
<If "%{ENV:PATHSTEM} != %{ENV:HREFBASE}">
RewriteRule ^ %{REQUEST_SCHEME}://%{HTTP_HOST}/%{ENV:HREFBASE}%{REQUEST_URI} [R=302,L]
</If>
我可以看到变量并没有通过用 PHP 捕获条件并打印出整个$_SERVER
数组来进行比较;对此重要的部分是:
[HREFBASE] => anon
[PATHSTEM] => Proc
- 这清楚地表明它们不一样,但不会发生重定向。
解决方案
RewriteCond
不允许在右侧使用变量。但是有一种解决方法可以通过将两个变量合并为一个并使用否定条件来断言相等来实现这种比较。
RewriteCond %{ENV:HREFBASE}#%{ENV:PATHSTEM} !^([^#]+)#\1$
RewriteRule ^ %{REQUEST_SCHEME}://%{HTTP_HOST}/%{ENV:HREFBASE}%{REQUEST_URI} [R=302,L,NE]
- 在这里,我们将这两个变量与一个已知的分隔符组合在一起
#
。 ^([^#]+)#
匹配值直到并在组 #1 中#
捕获之前的值。#
\1$
然后匹配组#1的反向引用- 请注意,
!
before^
否定了这个比较,从而有效地给出了这个比较:
%{ENV:HREFBASE} != %{ENV:PATHSTEM}
推荐阅读
- python - 在kivy中将变量传递到下一个屏幕
- php - 在 WooCommerce 中隐藏某些运输类别的运输方式
- python - 无法在 AWS EC2 VM 上运行映像错误:docker run standard_init_linux.go:211: exec 用户进程导致“exec 格式错误”
- flutter - MobX 中的 ObservableList 和 @observable List 有什么不同
- r - 按出现在 R 中的一列或另一列中的值过滤
- html - 如何摆脱 Dash 上 HTML 页面顶部的空白?
- ios - 如何在警报标题的右侧显示图像视图?
- sql - SQLite如何计算同一张表的两个变量之间的差异
- docker - 如何使用不同的用户进入 Docker 容器?
- typescript - 如何创建嵌套在其中的其他类型的类型?