重定向规则以匹配某些关键字但不匹配其他关键字

时间:2015-01-08 21:04:38

标签: regex apache mod-rewrite redirect mod-alias

我正在尝试编写与{1}之外的某些关键字匹配的RedirectMatchapache)。

...
RewriteEngine  on
RedirectMatch   ^/(banners|documents|images|static)/(.*)$ http://sb.amazonaws.com/$1/$2
RewriteRule     ^(.*)/(vrf[0-9]+)/(.*).(js|css)$  $1/$3.$4 [PT]

我提出了这个RedirectMatch规则,该规则将包含横幅,文档等的所有网址重定向到aws域。

现在,我想阻止包含temp的网址转到aws域。为此,我添加了!temp

RedirectMatch   ^/(!temp|banners|documents|images|static)/(.*)$ http://sb.amazonaws.com/$1/$2

这不允许像mysite.com/temp/a.jpg这样的网址转到AWS(但抱怨无限循环) 但不会阻止重定向mysite.com/images/temp/a.jpg。这个规则应该是正确的正则表达式?

[编辑]

  • mysite.com/images/foo/a.jpg应该转到AWS
  • mysite.com/images/foo/temp/a.jpg不应该转到AWS
  • mysite.com/temp/a.jpg不应该访问AWS

[EDIT2] 这让我接近我想要的东西

RewriteEngine  on
RewriteRule ^(images/groups/temp)/(.*)$ $1/$2 [PT]
RewriteRule ^(banners|documents|images|static)/(.*)$ http://sb.amazonaws.com/$1/$2
RewriteRule ^(.*)/(vrf[0-9]+)/(.*).(js|css)$  $1/$3.$4 [PT]

1 个答案:

答案 0 :(得分:1)

请勿将RedirectMatchRewriteRule混合使用。使用RewriteCond添加例外:

RewriteEngine  on

RewriteCond %{REQUEST_URI} !^/images/groups/temp/ [NC]
RewriteRule ^(banners|documents|images|static)/(.*)$ http://sb.amazonaws.com/$1/$2 [L,NC,R]

RewriteRule ^(.*)/(vrf[0-9]+)/(.*).(js|css)$  $1/$3.$4 [PT]