Articles of 正则expression式

在一个或多个(!)反向代理后面,通过X-Forwarded-For检查Varnish ACL

我已经在反向代理(在localhost上运行,用于SSL卸载)后面运行Varnish。 代理设置X-Forwarded-For头部,或者如果头部已经存在,则将其自身添加到头部。 当我做ACL检查当然我想检查原始客户端的IP,而不是我的代理的IP,所以我不能使用client.ip字段。 与std vmod我可以做到以下几点: vcl 4.0; import std; sub vcl_recv { if (std.ip(regsub(req.http.X-Forwarded-For, ", 127.0.0.1$", ""), "0.0.0.0") ~ my_acl) { …do stuff… } } 换句话说,在通过std.ip运行代理服务器的IP(127.0.0.1)并将其与我的ACL进行比较之前,我会从代理服务器的IP中std.ip IP(127.0.0.1)。 这工作正常,除… 当X-Forwarded-For头部已经在它到达我的代理之前已经被设置,这将失败。 在这种情况下,XFF标题包含三个或更多的IP地址。 修剪最后一个仍然留下了多个和std.ip扼stream圈,延迟了几秒钟的请求,当然无法检查ACL。 我需要确保XFF标题只包含一个IP(IPv4或IPv6)后,我已经closures了代理服务器。 这应该是客户的IP。 例如: X-Forwarded-For: 10.10.1.1, 10.10.2.2, 2001:a031:100a:dead:beef:1234:1234:1234, 127.0.0.1 应该成为 X-Forwarded-For: 2001:a031:100a:dead:beef:1234:1234:1234, 127.0.0.1 由于我不能相信任何来自外部的XFF头文件,我想丢弃除代理服务器看到的客户端IP以外的任何内容。 我的代理不支持修改XFF头,所以我需要在Varnish中完成。 当我可以与头文件交互时,Varnishstream中的第一点是在vcl_recv()中,此时Varnish已经将client.ip添加到了列表的末尾。 我希望使用正则expression式来捕获最后两个项目(IPv4或IPv6)到一个编号的捕获组($ 1),并简单地用捕获组replace头。 喜欢这个: vcl 4.0; import std; sub vcl_recv […]

多行PCRE w \ lookhead,计数匹配

我试图执行一个正则expression式匹配,如果这两个字猫和狗都在正则expression式与多线支持 matches cat asdjfaldsfj dog #### does NOT match cat adfasdf8989 #### matches dog adlsjf88989 cat #### matches cat asdf8a89sdf8 a sdf asd f ads f ads fasdf dog a dsf ads fads f asdfadsfadsf 我使用的正则expression式非常简单 /^(?=.*\bcat\b)(?=.*\bdog\b).*$/gs 问题是,这只是第一次发现,因为它是贪婪的。 我真的希望以下几个比赛,但只匹配一次 cat asdf8a89sdf8 a sdf asd f ads f ads fasdf dog a dsf ads fads f […]

在Delphi源文件中查找枚举的正则expression式?

背景是在Delphi中我有一个复杂的内存问题 。 但是一个理论是5值的枚举可以成为bug的根源。 所以我对你的问题是: 如何写一个正则expression式来search一个枚举值为5的源文件? Delphi中的枚举看起来像这样 myEnum = (value1,value2,value3,value4,value5); 当然,值之间可以有空格,制表符和换行符的任意组合。

如何使用重写规则来testingcookie中的date?

我发现你不能在下一个Rewrite Cond中使用RewriteCond反向引用作为模式条件。 更新:事实certificate,mod_rewrite不扩展testing模式中的任何variables,所以我实际上只有testing的存在的cookie …任何想法如何实际testing的价值,而不仅仅是存在? RewriteCond %{HTTP_COOKIE} niftyExpire=([^;\ ]+) RewriteRule .*index.html /fake.html [E=niftyExpire:%1,C] RewriteCond %{TIME} <{ENV:niftyExpire} RewriteRule .*fake.html /pass.html [R,L] RewriteRule .*index.html /fail.html [R,L] 谢谢, -Eric

正则expression式和.htaccess – 需要帮助理解

我理解.htaccess和mod_rewrite在一个相当基础的层面,并刚刚开始学习ForceType和SetHandler指令。 这是我的域的.htaccess文件,testsite1.localhost(只能通过URL中的127.0.0.1访问): <Files .+*^$[]()> ForceType application/x-httpd-php SetHandler application/x-httpd-php </Files> 文件之后的部分是什么意思? 由于某种原因,似乎工作,虽然我不知道为什么。 请有人可以帮忙吗? 我已经从Google了解到这一点,但其他用户的经验是欢迎的! 谢谢

Apache问号重写规则的问题

所以我正在尝试redirect index.php?action=search&query=search text goes here 至 search?query=search text goes here 我试过这个,但没有运气 RewriteRule ^search/? index.php?action=search&query=$1 [QSA,L] 编辑:解决scheme是 RewriteCond %{QUERY_STRING} ^query=(.*)$ RewriteRule ^search/? index.php?action=search&query=%1 [QSA,L] 因为我在我的htaccess中有一些其他的RewriteRules,我必须把它们放在它们上面。 我的其他rewriterules是这样的: RewriteRule ^(\w+)/?$ index.php?action=$1

nginx重写configuration

我对nginx相当陌生,并试图设置一些非常简单的重写规则,但他们似乎并没有工作。 只是为了您的信息,这台server { .. }有它的server_name domain.com *.domain.com 。 我有这个rewrite ^ /index.php?/$request_uri; 这似乎很好。 这将匹配domain.com/asd/sad/sad,一切正常。 不过,我想做一些有趣的子域名…所以我有s1.domain.com和s198.domain.com但我想改变我的重写,所以它去/index.php?/s1/$request_uri如果这是有道理的? 所以子域在$request_uri之前。 这是我迄今为止所尝试的: if ($host ~* ^([az]+)\..*) { rewrite ^(.*)$ /index.php?/$1/$request_uri; } rewrite ^ /index.php?/$request_uri; 真的很感谢您可以给的任何帮助! 谢谢。

为什么我的SetEnvIfNoCase指令与请求的URI不匹配?

我试图设置Apache,使各种错误页面显示适合错误上下文的页眉/页脚。 如果用户请求公司页面,我想要显示与企业外观和感觉的错误。 如果在我们的应用程序中发生错误,我想用应用程序外观来显示它。 不幸的是,Apache不想玩。 在我的testing中,我设置了Apache在显示HTTP 503错误时使用特定的文档: # Service Unavailable ErrorDocument 503 /errors/error_503.shtml 在那篇文档中,使用SSI指令和环境variables,我构build了一些if / else逻辑,可以根据环境variables的内容有条件地包含这个或那个头文件。 这是我的testing文件: <!–#if expr="${is_corporate}" –> corporate here. <!–#else –> I'M NOT CORPORATE. <!–#endif –> <!–#echo var="is_corporate" –> <!–#echo var="REQUEST_URI" –> This is a 503 error message! Check it out! 不过,我似乎无法使用Apacheconfiguration中的SetEnvIf来匹配请求URI,因为我无法理解。 <Location /> # Allow error documents to use the application or […]

正则expression式在Powershell上不起作用

背景:我需要在C#源文件中匹配多行模式(?)。 正则expression式将由Powershell操作。 我已经testing过,它在RegexBuddy上运行(使用Dot Matches换行符),但是当我尝试通过powershell使用它时,它不起作用。 正则expression式: [\s]*(?!\/)\[Role.*?\].*?\(.*?\).*?; C#代码: [Role (MethodName ="param")] void doSomething(Param1 Param2); Powershell代码: $FunctionPattern="^[\s]*(?!\/)\[Role.*?\].*?\(.*?\).*?;" $FunctionMatch =[regex]::matches($Data,$FunctionPattern) $FunctionMatch | format-table index,length,value -auto 据此,Powershell使用多行,我必须使用构造(?m),但这是行不通的 提前帮助和感谢! (Opps我不能使用grep /专用的分析器/和findstr不没有hacl等多行,因此需要Powershell)

Sed多行代替转义string

我试图将mysqldump输出文件转换为PostgreSQL兼容的SQL。 问题在于处理转义的string值。 我需要从: VALUES('blah blah blah','second string \'with escaped\' quotes and multiple lines goes here',35,10,'meh') 至: VALUES(E'blah blah blah',E'second string \'with escaped\' quotes and multiple lines goes here',35,10,E'meh') 注意在每个单引号string之前加上“E”。 这怎么能在sed中完成呢? 也可以打开使用其他正则expression式引擎,只要我可以stream式处理(在这里处理多GB文件)。