2011-10-31 82 views
2

我想对做301永久重定向一个特定的模式的请求重写规则:重写一切为了一个子域除了匹配

assets.example.com/x/y/z?a=b 

example.com/x/y/z?a=b 

除非

x == assets 

这里的上下文是一个CDN,它向assets.example.com发出原始请求。 assets.example.com子域共享相同的DocumentRoot,因此与example.com共享相同的robots.txt。因此,理论上可以访问assets.example.com子域而不是example.com。我想重新定向assets.example.com子域下的所有内容,但实际资产(全部位于/ assets /目录下)除外。

回答

1

你在这里 - 我用Apache 2.2测试了这个。它应该适用于任何最新版本。

RewriteEngine On 
    RewriteCond %{REQUEST_URI} !^/assets 
    RewriteCond %{HTTP_HOST} ^assets\.example\.com 
    RewriteRule ^/(.*) http://example.com/$1 [R=301,L] 

这里的逻辑是,重写条件与AND'ed在一起。它只是简单介绍那些需要做到重定向的事情。首先它测试第一个路径段是不是/资产。然后它会测试主机名是否为assets.example.com。如果这两个都是真的,那么它会执行永久重定向并结束规则集。