【问题标题】:regex to not match if a specified string exists如果指定的字符串存在,则正则表达式不匹配
【发布时间】:2009-11-14 01:23:08
【问题描述】:

我正在尝试进行 apache 重写,如果 request_uri 中包含术语“admin”

mydomain.com/admin/anything_else

重写主机以使用子域

admin.mydomain.com/admin/anything_else.

同样,如果我在 admin.mydomain.com 中单击一个链接并且它是一个没有“admin”的 url,那么我想将 url 重写回

mydomain.com/anything_else

我的问题是。正则表达式可以做这样的存在检查吗?我知道它可以做不匹配的术语(虽然我不知道语法......),但在这种情况下,我希望正则表达式完全失败。有什么想法吗?

ReWriteCond [^(admin)]$

mydomain.com/admin/hi - 匹配 mydomain.com/anything - 不匹配

【问题讨论】:

    标签: regex apache mod-rewrite regex-negation


    【解决方案1】:

    试试这些规则:

    RewriteCond %{HTTP_HOST} !=admin.example.com
    RewriteRule ^admin(/|$) http://admin.example.com%{REQUEST_URI} [L,R=301]
    RewriteCond %{HTTP_HOST} =admin.example.com
    RewriteRule !^admin(/|$) http://example.com%{REQUEST_URI} [L,R=301]
    

    【讨论】:

      【解决方案2】:

      您可以尝试使用负前瞻,例如 mydomain.com/(?!admin)

      【讨论】:

        【解决方案3】:

        我最终做了类似的事情......

        # Redirect to subdomain admin for an admin specific uri request
        RewriteCond %{HTTP_HOST} ^www.example.com$
        RewriteCond %{REQUEST_URI} admin
        RewriteRule ^(.*)$ http://admin.example.com$1 [L]
        
        # Redirect to subdomain admin for an admin specific uri request
        RewriteCond %{HTTP_HOST} ^admin.example.com$
        RewriteCond %{REQUEST_URI} !admin 
        RewriteRule ^(.*)$ http://www.example.com$1 [L]
        

        【讨论】:

          猜你喜欢
          • 2021-11-20
          • 2016-06-18
          • 1970-01-01
          • 2018-01-15
          • 2021-10-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-15
          相关资源
          最近更新 更多