mod_rewrite和点在URI的END

时间:2014-03-06 10:22:39

标签: apache .htaccess mod-rewrite rewrite period

我一直在开发一个商店,它使用mod_rewrite来让我们使URI更具可读性,例如:

http://www.example.com/shop/Tools

将被重写为

http://www.example.com/index.php?area=shop&folder=Tools

我的重写规则如下:

RewriteRule ^shop/([^?#]+) index.php?area=shop&folder=$1 [NC,QSA,L]

但是,当文件夹名称结束时,这会中断。 (点),正如我在使用以“etc。”结尾的文件夹名称进行测试时发现的那样。

在填充$_GET之前,似乎完全删除了任何尾随点。如果我在点后添加另一个字符,那很好,如果URI以任意数量的点结束,它们将被删除

有没有办法阻止这种情况发生?

1 个答案:

答案 0 :(得分:0)

您不需要排除“?”和RewriteRule中的“#”,因为它只在URI(路径)上运行,没有查询字符串或锚。

所以,这就足够了:

RewriteRule ^shop/(.+) index.php?area=shop&folder=$1 [NC,QSA,L]

话虽如此,这并没有改变被剥夺的事实。

这可能是MultiViews开启的结果。此选项使Apache尝试并解析URI而忽略扩展。

所以,添加它:

Options -Multiviews