Apache-2.2

Apache 配置重定向只使用重定向,而不是重寫

  • March 17, 2015

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

引用自:https://serverfault.com/questions/633420