
我讀過有關此事的主題。但是,它們僅適用於單一主機。
我希望對當前和未來網域的所有伺服器有一個統一的規則。
基本上,我想從所有請求中刪除 www,只留下可訪問的網域。
Apache 也提供 HTTPS,那麼如何將其應用到所有伺服器上呢?
謝謝!
http://www.example.com >> http://example.com
https://www.example.com >> https://example.com
瑪麗亞
答案1
您所描述的內容(看起來)mod_rewrite
在特定程度上是不可能使用的。
來自多個“級別”的配置不會堆疊在 中mod_rewrite
,因此主伺服器配置中定義的規則集不會自動導入並應用於委託給<VirtualHost>
.
但是,假設您無論如何都必須<VirtualHost>
在某個時刻分配 ,如果您不打算在主體內有任何其他規則<VirtualHost>
(如果它們在.htaccess
或 一個<Directory>
部分中,那就沒問題了),您可以使用下列的。
在主要配置中,我們將採用我的回答這個相關問題並應用它:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.
RewriteCond %{HTTPS}s ^on(s)|off
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)?(.+)$
RewriteRule ^ %1%3%{REQUEST_URI} [R=301,L]
然後,在我們的每個<VirtualHost>
部分中,我們可以使用RewriteOptions
指示:
RewriteEngine On
RewriteOptions inherit
當然,您也可以簡單地將規則集<VirtualHost>
全部複製到每個規則集,但這會將相關規則集保留在單一位置。
請注意,我建議在這種情況下直接不要添加附加規則的原因<VirtualHost>
是繼承的規則已包含在內後無論您在配置的當前等級中定義了什麼,這都可能會產生意想不到的副作用。