无法将字面点与htaccess正则表达式匹配

时间:2011-10-12 12:59:43

标签: regex apache .htaccess

问题:我无法弄清楚如何匹配表达式中的文字点,这样我就可以重写包含点的查询字符串。首先,我尝试过这样的事情:

RewriteRule ^([\.\w]+)$ index.php?url=$1 [L]

我有一个PHP脚本:

echo "url is: ".$_GET['url'];

理论上,它应该输出我在查询中写的任何内容。但是对于任何只包含字母和点的查询,我的脚本总是输出:

url is: index.php

我也尝试过这些表达式:

^(.+)$
^([.\w]+)$

结果是一样的。

所以问题是:我的表达式是错误的还是与服务器的配置有关?

1 个答案:

答案 0 :(得分:1)

如果我使用匹配小于index.php的规则(例如..匹配xy),则看起来在应用规则之前会处理另一个请求,结果符合预期:xy。如果有更多轻松的规则,例如.*.+,则会失败。 x.*可以正常工作。

您可以添加其他条件来忽略index.php

等请求
RewriteCond %{REQUEST_FILENAME} !index\.php$
RewriteRule ^(.+)$ index.php?url=$1 [L]

使用以下方法测试/调试:

<?php
printf("url is: %s <br>\n", htmlspecialchars(filter_input(INPUT_GET, 'url')));
echo "<pre>",htmlentities(print_R($_SERVER, 1));