Regex Mod_Rewrite:未设置cookie时的默认值

Regex Mod_Rewrite:未设置cookie时的默认值,regex,apache,.htaccess,mod-rewrite,cookies,Regex,Apache,.htaccess,Mod Rewrite,Cookies,我有下面的重写规则 RewriteCond %{HTTP_COOKIE} lang=([^;]+) RewriteRule .* $1/%{unescape:%1}/index.html [L] 我想知道当“lang”cookie未设置(或为空)时,是否有方法获取默认值(如“en”)。这样,%1的值将是cookie的值或“en”。您可以使用如下技巧规则来获取默认值: RewriteCond %{HTTP_COOKIE}##en lang=([^;]+)|##(en) [NC] RewriteR

我有下面的重写规则

RewriteCond %{HTTP_COOKIE} lang=([^;]+)
RewriteRule .* $1/%{unescape:%1}/index.html [L]

我想知道当“lang”cookie未设置(或为空)时,是否有方法获取默认值(如“en”)。这样,%1的值将是cookie的值或“en”。

您可以使用如下技巧规则来获取默认值:

RewriteCond %{HTTP_COOKIE}##en lang=([^;]+)|##(en) [NC]
RewriteRule (.*) $1/%{unescape:%1%2}/index.html [L]

由于使用正则表达式替换,只会填充一个反向引用
%1
%2
,即如果
lang=([^;]+)
模式匹配cookies,则将设置
%1
,并且
%2
将为空。如果
lang
cookie不可用,则
%1
将为空,但
%2
将被设置为
en

谢谢!我似乎找不到有关“##”用法的文档。想解释一下吗?哦,
##
可以是任意的定界符。它很可能是:
RewriteCond%{HTTP_COOKIE}:::en lang=([^;]+)|:::(en)[NC]
。哦,太棒了!