[英]How to configure Apache to redirect HTTP to HTTPS on a virtualhost that have an alias?
我有一個如下配置的虛擬站點,它將所有 HTTP 請求重定向到 HTTPS:
<VirtualHost *:80>
ServerName api.example.com
ProxyPreserveHost on
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
RewriteEngine on
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule ^/?(.*) "ws://localhost:8080/$1" [P,L]
RewriteCond %{SERVER_NAME} =api.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
但是下面的配置不起作用,它只是為站點的 HTTP 版本的用戶服務:
<VirtualHost *:80>
ServerName secondexample.co.zw
ServerAlias www.secondexample.co.zw
ProxyPreserveHost on
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
RewriteEngine on
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule ^/?(.*) "ws://localhost:8080/$1" [P,L]
RewriteCond %{SERVER_NAME} =www.secondexample.co.zw [OR]
RewriteCond %{SERVER_NAME} =secondexample.co.zw
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
我注意到的唯一區別是第二個配置有一個別名。 第二個配置有什么問題?
<VirtualHost *:80> ServerName secondexample.co.zw ServerAlias www.secondexample.co.zw ProxyPreserveHost on ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ RewriteEngine on RewriteCond %{HTTP:Upgrade} websocket [NC] RewriteCond %{HTTP:Connection} upgrade [NC] RewriteRule ^/?(.*) "ws://localhost:8080/$1" [P,L] RewriteCond %{SERVER_NAME} =www.secondexample.co.zw [OR] RewriteCond %{SERVER_NAME} =secondexample.co.zw RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost>
規則順序不對。 規范重定向(HTTP 到 HTTPS)需要放在首位。 但是,如果您想從 HTTP 重定向到 HTTPS,則此處不需要任何代理指令,應將其刪除。 大概代理指令在<VirtualHost *:443>
容器中重復。
如果您只是將 HTTP 重定向到 HTTPS,那么您不需要使用 mod_rewrite。 更簡單的 mod_alias Redirect
指令更可取。 並且您應該將主機名規范化(www 與非 www)作為重定向的一部分(除非您正在實施 HSTS),而不是重定向到同一主機。
例如,它可以簡化為:
<VirtualHost *:80>
ServerName secondexample.co.zw
ServerAlias www.secondexample.co.zw
Redirect 301 / https://secondexample.co.zw/
</VirtualHost>
然后,所有代理指令都在<VirtualHost *:443>
容器中。
這同樣適用於您的第一個虛擬主機。
我注意到的唯一區別是第二個配置有一個別名。
Alias
在這里沒有區別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.