2011-10-31 147 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。如果這兩個都是真的,那麼它會執行永久重定向並結束規則集。