Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.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 两条规则在mod_rewrite中产生相同的结果_Regex_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Regex 两条规则在mod_rewrite中产生相同的结果

Regex 两条规则在mod_rewrite中产生相同的结果,regex,apache,.htaccess,mod-rewrite,Regex,Apache,.htaccess,Mod Rewrite,我在家里的电脑上用127.0.0.1作为IP地址进行了测试。我使用规则集制定了一些重写规则,如下所示: RewriteEngine On RewriteRule ^x\/x$ /letterx [NC,L] RewriteRule ^y/y$ /lettery [NC,L] 当我进入浏览器并输入127.0.0.1/x/x时,我会被重定向到127.0.0.1/x。 当我输入127.0.0.1/y/y时,我将被重定向到127.0.0.1/letty 在线查看各种正则表达式的来源,没有文章声称/是需

我在家里的电脑上用127.0.0.1作为IP地址进行了测试。我使用规则集制定了一些重写规则,如下所示:

RewriteEngine On
RewriteRule ^x\/x$ /letterx [NC,L]
RewriteRule ^y/y$ /lettery [NC,L]
当我进入浏览器并输入127.0.0.1/x/x时,我会被重定向到127.0.0.1/x。 当我输入127.0.0.1/y/y时,我将被重定向到127.0.0.1/letty

在线查看各种正则表达式的来源,没有文章声称/是需要转义的字符,但声称它确实需要转义


为什么在这组代码中,我尝试成功重定向两个URL?一个人不应该失败吗?我不知道mod_rewrite中有什么bug吗?基于许多网站,您可能会认为上面的第二行代码应该失败,第三行应该可以工作,但我感到困惑。

默认情况下,regex101站点使用PCRE样式的正则表达式,php使用,并由两个/字符分隔。例如:

/thisismyregex/
thisismyregex是由/分隔符包围的正则表达式,如果我想指定正则表达式标志,我会将它们添加到最后一个/:

由于PCRE样式的正则表达式使用/作为分隔符,因此如果要匹配正则表达式中的/,则需要将其转义:

哪个不区分大小写匹配:this/is/my/regex

但是,mod_rewrite不使用PCRE样式的正则表达式分隔符,因此您不需要费心转义/。例如,在regex101站点上,将regex样式切换到其他样式,javascript或python,您会注意到突然不再需要转义/


是否有用于更改这些正则表达式分隔符的配置文件


不可以。但是您可以查看。

@Prix您对PCRE的看法是正确的,但是/不是具有特殊意义的字符,不需要转义。需要转义的唯一时间是,如果regex分隔符设置为/…@hwnd yes,则不需要转义,因为mod_rewrite通过更改默认修饰符或出于安全或任何原因预先转义/使用了任何方法。但是,您的回答措辞不正确,并且错误地理解了/was/在PCRE中代表的含义。是否有一个配置文件可用于更改这些正则表达式分隔符?@Mike我不知道,但您可以放心地假设/mod_rewrite或.htaccess在大多数(如果不是所有)使用它的情况下,不需要在mod_rewrite或.htaccess中转义以及mod_rewrite或.htaccess。
/thisiscaseinsensitive/i
/this\/is\/my\/regex/i