如果存在指定的字符串,则regex不匹配

时间:2009-11-14 01:23:08

标签: regex apache mod-rewrite regex-negation

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

mydomain.com/admin/anything_else

重新编写主机以使用子域

admin.mydomain.com/admin/anything_else。

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

mydomain.com/anything_else

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

ReWriteCond [^(admin)] $

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

3 个答案:

答案 0 :(得分: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]

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我最后做了类似的事......

# 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]