【问题标题】:Match all the strings except www in URL rule apache 2匹配 URL 规则 apache 2 中除 www 之外的所有字符串
【发布时间】:2017-10-31 01:26:40
【问题描述】:

这是我在运行 apache2 并启用 mod_rewrite 的应用程序的 URL 管理器中的规则:

'http://<username:\w+>.domain.com' => 'public/profile',

我想在所有情况下都进行匹配,除非用户名是 www。意味着当用户名替换为 www 时,它不应该通过。它应该在所有情况下都匹配。我已经这样做了,但它不起作用:

'http://<username:(?!www)([a-z0-9_-]+)\w+>.domain.com' => 'public/profile'

我做错了什么?

【问题讨论】:

  • 试试:'http://&lt;username:(?!www\.)\w+&gt;\.domain\.com' =&gt; 'public/profile',
  • 谢谢@anubhava。但它没有用。规则不匹配。我希望当 abc.domain.com 被命中时,它应该转到 public/profile 路由,当 www.domain.com 或 www.domain/* 路由被命中时,它应该运行相关路由(控制器操作)。但是上面的规则 abc.username.com 并没有走这条路。
  • 现在可以使用了。它在没有反斜杠的情况下工作,即 http://.domain.com' => 'public/profile 您可以将此添加为答案,我会接受。非常感谢您的帮助。

标签: regex apache url-rewriting


【解决方案1】:

当规则以www. 开头时,您可以使用否定前瞻跳过规则:

'http://<username:(?!www\.)\w+>.domain.com' => 'public/profile',

(?!www\.) 是当我们在开始时有 www. 时断言失败的否定前瞻。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多