我在我的.htaccess文件中遇到了一个非常基本的正则表达式问题,我希望有人能够说明一些问题。基本前提是我想教Apache将任何.html扩展名切换为.var扩展名。我曾经认为这个规则会显得微不足道:在RewriteRule中造成头痛
RewriteRule ^([^.]+)\.html$ $1.var
但是[^。]部分根本不起作用。奇怪的是,它的工作原理是这样的
RewriteRule ^([^A-Z]+)\.html$ $1.var
我不明白为什么后者的规则有效。假设我正在寻找名为“index.html”的文件,那么$ 1应该匹配到“索引”。和“.html”位应该实际上不匹配。
为了扩大这个问题的范围,我实际上正在绞尽脑汁想如何实现一个多语言网站。我不喜欢Apache的MultiView选项,因为它强制我的平面目录结构具有许多开发工具无法识别的文件扩展名。我可以去.var类型地图路线,但我发现Apache的默认配置不支持这一切都好(因此我的游览到正则表达式土地)。所以,当我使用mod_rewrite时,我想我可能会走完整个猪圈:每当收到一个name.html文件的请求并且该文件不存在时,检查是否存在XX/name.html文件,而不是“XX”是根据用户喜好的语言代码。
这会给我一个整洁的目录结构,虽然它可能不会像.var方法那样执行,在用户浏览器的语言首选项不被我的站点支持的情况下(在这种情况下.var会取代EN或类似的)。
有什么想法?谢谢。
好吧,我发现我一直是一个白痴。你的回答非常正确。唉,我没有考虑我的(无条件的)RuleRewrite的影响:一旦我将index.html变形为index.var,Apache的类型映射就跳入了操作中,并查看index.var文件中的资源进行映射。它将DE/index.html拉出帽子。然后,Apache将DE/index.html接受另一个重写过程,最终将该名称改为DE/index.var。而那个文件则不存在。不计算精彩:-))) – Ollie2893 2010-03-09 10:18:50
糟糕:)好的侦探工作。 – 2010-03-09 10:41:54