我正在尝试为
做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。如果这两个都为真,则执行永久重定向并结束规则集。