问题:我无法弄清楚如何匹配表达式中的文字点,这样我就可以重写包含点的查询字符串。首先,我尝试过这样的事情:
RewriteRule ^([\.\w]+)$ index.php?url=$1 [L]
我有一个PHP脚本:
echo "url is: ".$_GET['url'];
理论上,它应该输出我在查询中写的任何内容。但是对于任何只包含字母和点的查询,我的脚本总是输出:
url is: index.php
我也尝试过这些表达式:
^(.+)$
^([.\w]+)$
结果是一样的。
所以问题是:我的表达式是错误的还是与服务器的配置有关?
答案 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));