【发布时间】:2017-12-18 17:09:11
【问题描述】:
我有一个重写块,旨在将用户重定向到反映其区域设置的 URL,如果他们还没有的话。这似乎需要我比较两个变量,我意识到这在 RewriteCond 中有点棘手,但必须有一种方法可以优雅地做到这一点,而不是有几个不同的规则。
基本上 - 如果我在这里但不应该在这里(因为地理围栏),请重定向到已识别的路径。
# Snip several SetEnvIf rules for the UserLocale variable used below
RewriteCond %{REQUEST_URI} ^/(us|au|uk|eu)/$
# This is where I'm having trouble.
# This following condition should evaluate whether the requested URI matches the StoreLocale
RewriteCond %{ENV:UserLocale} !%1
RewriteRule ^(.*)$ https://example.com/%{ENV:UserLocale}/ [R=302,L]
我知道有一些关于combining two variables 的语法,但我无法在这里得到否定测试。
【问题讨论】:
-
所以
RewriteRule应该在%{ENV:StoreLocale}不是%{REQUEST_URI}时触发?还有RewriteCond %{REQUEST_URI} ^/(us|au|uk|eu)/$背后的逻辑是什么? -
是的。本质上是:“如果请求的 URL 是
/(us|au|uk|eu)/”,那么如果捕获的片段与定义的StoreLocale不匹配(例如,我正在请求 /eu/ 但 StoreLocale 是us)”,然后重定向到包含 StoreLocale 的 URL。(注意:将“StoreLocale”视为“UserLocale”可能更符合上下文意义。我会更新) -
所以
%{ENV:UserLocale}的值是/us/还是只是us? -
UserLocale将是“我们”、“澳大利亚”、“英国”或“欧盟”
标签: regex apache mod-rewrite