【发布时间】:2018-10-30 06:31:17
【问题描述】:
为什么这个 RegEx 会失败?
目标是重写:
http://example.com/Almost-Anything-Here/381
--> /lv.php?id=381&%{QUERY_STRING}
请注意,我忽略了 URL 中的文本,只是尝试获取数字(在本例中为 381),我将其传递给 lv.php。
规则如下:
RewriteRule ^[/]?[A-Za-z0-9\-_(\.)*]+/([0-9]+)$ /lv.php?id=$1&%{QUERY_STRING} [L]
如果有 0、1 或 2 个句点,但它会在 3 个或更多句点内失败(使用 HTTP 500)。为什么?!我尝试了几种在正则表达式中转义/捕获句点的方法,但没有运气。
示例测试网址:
- 作品:
http://example.com/Great/381 - 作品:
http://example.com/Great./381 - 作品:
http://example.com/Great../381 - 失败:
http://example.com/Great.../381
UPDATE 这是来自服务器日志的错误消息,显然是正则表达式问题,仍然不知道为什么......
Access denied with code 500. Pattern match "\\\\.\\\\.\\\\./" at REQUEST_URI. [msg "Bogus Path denied"] [hostname "www.example.com"] [uri "/Great.../381"]
【问题讨论】:
-
你能检查一下 HTTP 500 的日志吗?
-
谢谢@Thefourthbird,这提供了一个巨大的线索......
-
不确定是否有帮助,但我认为您不必在字符类中转义点
\.。 -
使用
xampp没问题,你的htaccess中有RewriteBase / -
如果你改用
RewriteRule ^.*/([0-9]+)/?$ /lv.php?id=$1 [QSA,L]会怎样?