为什么RegEx允许添加超过1斜杠?

时间:2013-09-23 13:32:10

标签: regex .htaccess mod-rewrite

我有以下重写规则:

RewriteEngine on  
RewriteRule ^check/([^\/]+)/?$ check.php?id=$1 [L]

当我去检查/连接////时,check.php将其显示为已连接。但是,根据我对重写规则的理解,如果我向连接添加多个尾部斜杠,则它不应该匹配。

Check.php:

<?php
echo $_GET['id'];
?>

2 个答案:

答案 0 :(得分:0)

请注意,在/中匹配网址正则表达式时,多个/ 被精简到单RewriteRule 。这就是你看到这种行为的原因。

如果你想匹配多个/(比方说2个或更多),你应该使用:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+check/[^/]+/{2,}

答案 1 :(得分:0)

在浏览器和服务器之间的某个地方,连续的斜杠被压缩成一个。毕竟,在引用文件名的正常情况下,一行中有多个斜杠是没有意义的。

出于这个原因,你的.htaccess只会在最后看到一个斜杠,而不是你实际输入的多少斜杠。这就是你的RewriteRule工作的原因,也是为什么结果只是“连接”而没有任何额外的斜杠。