.htaccess - 帮助我理解这种行为

时间:2016-10-30 23:44:26

标签: regex apache .htaccess redirect mod-rewrite

我在本地PC上使用xampp。 .htaccess文件放在/test/文件夹中。我正在Chrome浏览器上测试地址 localhost/test

.htaccess文件是这样的:

RewriteEngine On
RewriteRule . http://google.com

重定向到Google。与此相同

RewriteEngine On
RewriteRule .. http://google.com

3点,4点,5点,6点,7点,8点,9点相同。

但是当有10个点或更多重定向时不起作用。所以这不做重定向(10点)

RewriteEngine On
RewriteRule .......... http://google.com

这样的.htaccess文件中的点实际意味着什么?他们是正则表达式吗?什么是10的神奇数字?

修改 我可能找到了原因。在localhost/test的地址上打开的文件是index.php。这个文件名长度实际上是9个字母。

所以九个或更少的点匹配它,但10个点不匹配。我认为这是安装。

EDIT2 点上还有一些神奇的东西。现在我已将.htaccess文件放到test2的空目录中,并开始测试localhost/test2的地址。

重定向最多可达13个点。对于14个点以上,没有重定向。混乱。

3 个答案:

答案 0 :(得分:1)

您正在处理标准PCRE。点不是魔术,每个都意味着匹配任何角色'。它必须匹配路径组件中的13个字符(当前目录的尾随斜杠后面的所有内容)才能进行谷歌重定向,但不能匹配14.要查看它实际匹配的内容,请尝试使用此规则替换它:

RewriteRule .+ https://www.google.com/search?q=$0 [B,L,R]

您是否有先前的规则缺少L标志,该标志告诉引擎停止寻找匹配项?

答案 1 :(得分:0)

根据Apache文档(https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule):

RewriteRule的语法是RewriteRule Pattern Substitution [flags],其中Pattern是“perl兼容的正则表达式”。这可以解释你观察到的行为!

答案 2 :(得分:0)

我刚刚在apache错误日志文件中找到了answear。即使目录中只有.htaccess文件,这个正则表达式的点与一些默认文件名匹配。在我的配置中,默认文件名是:

index.php
index.pl
index.cgi
index.asp
index.shtml
index.html
index.htm
default.php
default.pl
default.cgi
default.asp
default.shtml

匹配以default.shtml文件名结尾,只有13个字母(13个点)。实际上,目录中不存在default.shtml文件。然后开始重定向。