【问题标题】:How do I create a regular expression to negate a string but include anything else如何创建正则表达式来否定字符串但包含其他任何内容
【发布时间】:2011-03-25 11:22:19
【问题描述】:

我正在尝试为 apache 创建一个正则表达式,它会忽略某些字符串,但会使用其他任何字符串。我尝试了许多不同的方法,但我似乎无法正确。

例如

我希望它忽略

ignore.mysite.com

但我想让它使用其他任何东西

*.mysite.com

【问题讨论】:

    标签: regex apache .htaccess virtualhost


    【解决方案1】:

    如果你想要这个 mod_rewrite 的正则表达式,你可以使用带有否定的RewriteCond,就像这样:

       RewriteCond %{REMOTE_HOST}  !^ignore.example.com$
       RewriteRule ....
    

    当然,您可以在文档中找到更多信息。

    【讨论】:

    • 我希望在虚拟主机的服务器别名部分这样做
    • 在这种情况下,只需在*.example.com之前定义另一个虚拟主机ignore.example.com
    • 基本上我拥有的是三个站点,默认是 example.com 或 www.example.com,接下来我有 staging.example.com,最后是 devel.example.com,我希望将其他任何内容(devel.example.com 或 * 除了 staging)重定向到。现在我将这些网站中的每一个都分成了一个单独的虚拟主机
    【解决方案2】:

    如果您想要一个匹配whatever.mysite.com 的正则表达式,其中whatever 是任何可能的主机名,但您希望正则表达式不匹配ignore.mysite.com,那么试试这个:

    ^(?!ignore)[a-z0-9-]+\.mysite\.com
    

    诀窍是使用negative lookahead

    【讨论】:

      猜你喜欢
      • 2022-01-09
      • 1970-01-01
      • 2015-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多