【问题标题】:escaping dot in Apache mod_rewrite在 Apache mod_rewrite 中转义点
【发布时间】:2012-03-10 13:18:06
【问题描述】:

我一直在使用 tukey Apache mod-rewrite 引擎来重写 url。但是我在转义点以装饰 URL 时遇到问题,如下所示,

www.example.com/hello.world -> www.example.com/derive.php

以下规则是我为做上述事情而写的,

RewriteRule ^/?(([A-Za-z0-9:-])+([.]*))$ /derive.php[L]

RewriteRule ^/?(([A-Za-z0-9:-\.])+)$ /derive.php[L] 不被 tukey 允许)

我觉得用过tuckey装饰网址的人都可以完美回答这个问题。

【问题讨论】:

    标签: apache mod-rewrite tuckey-urlrewrite-filter


    【解决方案1】:

    在字符类中,点没有任何特殊含义,因此不必对它们进行转义;你应该可以简单地写:

    RewriteRule ^(?!/?derive[.]php$)/?[A-Za-z0-9:.-]+$ /derive.php [L]
    

    【讨论】:

    • 谢谢 Ruakh,我仍然无法让它工作。您的解决方案给了我一个 java.lang.StackOverflowError。就像我上面提到的,我在 GAE 应用程序中使用 tukey mod_rewrite 引擎。显然它不支持所有 mod_rewrite 选项。有人可以解决这个问题吗?谢谢,
    • @ChamikaDilshan:我怀疑这是因为无限递归——/derive.php 本身符合这条规则,所以它无限递归。 ([L] 应该可以防止这种情况发生,但也许 Tuckey 不太支持它?)所以我修改了正则表达式,在应用此规则时专门排除了derive.php
    • 实际上我是 URL 装饰的新手。但是,我能够根据您的完美指示将所有规则简化为一条规则。
    猜你喜欢
    • 2011-12-11
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    相关资源
    最近更新 更多