Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 为什么这个htaccess正则表达式会有3个或更多周期失败?_Regex_Apache_.htaccess - Fatal编程技术网

Regex 为什么这个htaccess正则表达式会有3个或更多周期失败?

Regex 为什么这个htaccess正则表达式会有3个或更多周期失败?,regex,apache,.htaccess,Regex,Apache,.htaccess,为什么这个正则表达式会失败 目标是重写: http://example.com/Almost-Anything-Here/381 -->/lv.php?id=381&%{QUERY\u STRING} 请注意,我忽略了URL中的文本,只是尝试获取数字(在本例中为381),然后将其传递到lv.php 规则如下: RewriteRule^[/]?[A-Za-z0-9\-\-\(\.)*]+/([0-9]+)$/lv.php?id=$1&%{QUERY\u STRING}[L] 如果有0个、1个或2个

为什么这个正则表达式会失败

目标是重写:

http://example.com/Almost-Anything-Here/381
-->
/lv.php?id=381&%{QUERY\u STRING}

请注意,我忽略了URL中的文本,只是尝试获取数字(在本例中为381),然后将其传递到
lv.php

规则如下:

RewriteRule^[/]?[A-Za-z0-9\-\-\(\.)*]+/([0-9]+)$/lv.php?id=$1&%{QUERY\u STRING}[L]

如果有0个、1个或2个周期,它可以工作,但失败(使用HTTP 500)3个或更多周期。为什么?我尝试了几种在正则表达式中逃避/捕获周期的方法,但没有成功

示例测试URL:

  • 作品:
    http://example.com/Great/381
  • 作品:
    http://example.com/Great./381
  • 作品:
    http://example.com/Great../381
  • 失败:
    http://example.com/Great.../381
更新这里是服务器日志中的错误消息,显然是正则表达式问题,仍然不确定原因…


访问被拒绝,代码为500。模式匹配“\\\.\\.\\\.\\\./”在请求时\u URI。[msg“虚假路径被拒绝”][hostname“www.example.com”][uri//太好了…/381”]

我确信您的Apache web服务器已安装并包含如下安全配置:

#generic bogus path sigs
SecRule REQUEST_URI "\.\.\./" "id:300006,rev:1,severity:2,msg:'Bogus Path denied'"

有一些,但通常情况下,mod_安全性的实现是有原因的。

你能检查一下HTTP 500的日志吗?谢谢@Thefourthbird,这提供了一个巨大的线索……不确定它是否有用,但我认为你不必在字符类中逃避点
。使用
xampp
没有问题,您的htaccess中是否有
RewriteBase/
如果您使用
RewriteRule^.*/([0-9]+)/?$/lv.php呢?id=$1[QSA,L]
?据我所知,这是ModSecurity 2.x中的默认规则之一。然而,我在3.x的规则中找不到它-但可能我看错了位置。谢谢你的回复,看起来很可能是这个罪犯!这就引出了一个问题,为什么这条规则存在于mod_security中,我需要保留它吗?我可以从mod_security config中删除它吗?@Eric我不能给出一个明确的答案,但可以说SecRule更像是一个健全的检查,而不是一个真正的安全保护。可能值得在webmasters.stackexchange.com或security.stackexchange上询问。com@Eric可以说,如果这条规则妨碍了你,它应该被删除。我在这里发现了一个事件,该规则阻止了vbulletion用户:下面是该规则的描述及其原理:
在任何操作系统中都没有这样的有效路径
感谢您的帮助和研究!我认为你的回答是最好的。非常感谢。