我一直在开发一个商店,它使用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以任意数量的点结束,它们将被删除
有没有办法阻止这种情况发生?
答案 0 :(得分:0)
您不需要排除“?”和RewriteRule
中的“#”,因为它只在URI(路径)上运行,没有查询字符串或锚。
所以,这就足够了:
RewriteRule ^shop/(.+) index.php?area=shop&folder=$1 [NC,QSA,L]
话虽如此,这并没有改变点被剥夺的事实。
这可能是MultiViews
开启的结果。此选项使Apache尝试并解析URI而忽略扩展。
所以,添加它:
Options -Multiviews