重写规则:重写子域的所有内容,但匹配特定模式的请求除外

时间:2011-10-31 16:01:36

标签: ruby-on-rails apache redirect ruby-on-rails-3.1

我正在尝试为

执行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 个答案:

答案 0 :(得分: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并在一起。它只是简单地介绍了重定向所需的事情。首先,它测试第一个路径段是否不是/ assets。然后它测试主机名是否为assets.example.com。如果这两个都是真的,那么它会执行永久重定向并结束规则集。