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



我正在尝试为

做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/目录下)。

我在Apache 2.2上测试了这个。它应该可以与任何最新版本兼容。

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

这里的逻辑是重写条件是和在一起的。它只是遍历需要为真才能执行重定向的内容。首先,它测试第一个路径段是否不是/assets。然后测试主机名是否为assets.example.com。如果这两个都为真,则执行永久重定向并结束规则集。

最新更新