Apache-2.2
Apache 配置重定向只使用重定向,而不是重寫
PS:這是最初發佈在這裡的問題的第二部分。
我想為特定的虛擬主機完全禁用HSTS 標頭。對於這些虛擬主機中的每一個,我(根據建議)在 443 容器中都有一個重定向。它工作正常,但除非絕對必要,否則Apache不建議使用*RewriteRule 。是否可以僅使用Redirect*****而不是 rewrite來執行下面的重定向?**
<VirtualHost x.x.x.x:443> <IfModule mod_headers.c> Header unset Strict-Transport-Security Header always set Strict-Transport-Security "max-age=0;includeSubDomains" </IfModule> SuexecUserGroup "#520" "#520" ServerName dev.domain.com ServerAlias www.dev.domain.com ServerAlias subdomainjr2b.dev.domain.com ServerAlias www.subdomainjr2b.dev.domain.com ServerAlias subdomainblah.dev.domain.com ServerAlias www.subdomainblah.dev.domain.com RewriteEngine On RewriteRule ^(.*)$ http://%{HTTP_HOST}$1 [redirect=302]
PS1:Domain.com 有一個萬用字元證書,萬用字元只對 sub.domain.com 有效,對 sub.sub.domain.com 無效,因此需要為這些虛擬主機禁用 hsts。
PS2:不要問我為什麼要
Header unset
在我已經使用的時候使用Header always set
。它在實現之前向客戶端發送了兩個標頭,據Header unset
我所知,它不應該。
使用
Redirect
代替的原因mod_rewrite
是後者比前者佔用更多的資源——而這樣做的原因是後者可以做更多的事情。mod_rewrite
可以做和不能做的事情之一RedirectMatch
是跟踪請求中使用的主機名。因此,這裡的問題是您希望在重定向後繼續使用相同的域名,並且您希望所有域作為同一虛擬主機中的別名。只要你想要這兩樣東西,那麼
mod_rewrite
就是唯一的工具。如果您可以將所有請求重定向到一個規範的主機名,或者您可以將它們拆分為
VirtualHost
每個域名一個,則可以RedirectMatch
改用,如下所示:RedirectMatch ^(.*)$ https://dev.domain.com$1