2014-03-06 14 views
0

我一直在开发一个店,它使用了mod_rewrite,让我们做出的URI的可读性,例如:的mod_rewrite和点的URI的END

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]

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

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

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

+1

卫生署,一直在寻找的年龄,并没有发现这些, http://stackoverflow.com/questions/16383339/mod-rewrite-with-网址后期 http://stackoverflow.com/questions/11144079/apache-mod-rewrite-ending-periods – Pez

+0

实际上,多一点挖掘和测试显示,这是一个Windows唯一的问题,如果任何人都可以摆脱这一点,我会很感激 – Pez

回答

0

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

所以,这是不够的:

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

话虽这么说,这并没有改变的事实,获得剥夺。

这可能是MultiViews处于打开状态的结果。这个选项让Apache尝试并解析URI而不考虑扩展名。

因此,添加此还有:

Options -Multiviews 
+0

感谢Poncha,虽然没有帮助 – Pez

+0

显然这是一个Windows问题rver) – Pez

+0

那么,您可以使用您找到的其中一个链接提供的解决方案,然后解析'REDIRECT_URI'(内部php)以解决此问题。这是如果你关心它在Windows上运行;) – poncha