我的域名使用了2个单独的虚拟主机文件:一个用于:80和一个用于:443
:80设置非常简单,唯一的工作就是重定向到:443:
<VirtualHost *:80>
# This is the first host so it's the default.
# So although I've specified a ServerName and ServerAlias anything else not specified elsewhere will also end up here.
ServerName www.domain.com
ServerAlias domain.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# Redirect everything to https:
RewriteEngine on
RewriteRule ^(.*)$ https://www.domain.com$1 [R=301,L]
</VirtualHost>
:443只需要在网址的开头添加www(如果不存在):
<VirtualHost *:443>
# This is the first host so it's the default.
# So although I've specified a ServerName and ServerAlias anything else not specified elsewhere will also end up here.
ServerName www.domain.com
ServerAlias domain.com
ErrorLog ${APACHE_LOG_DIR}/ssl.error.log
CustomLog ${APACHE_LOG_DIR}/ssl.access.log combined
# Redirect everything which is not already on the real www domain name to that:
RewriteEngine on
RewriteCond %{HTTP_HOST} !www.domain.com
RewriteRule ^(.*)$ https://www.domain.com$1 [R=301]
ErrorDocument 404 /404.html
</VirtualHost>
我发现这些重写似乎失败的一个案例:
https://domain.com - &gt;应该指向https://www.domain.com,但它指向https://www.domain.com%24/#。显然,后面的字符阻止DNS服务器找到域。
导致此问题的原因是什么?我已经帮助创建了这些虚拟主机文件,但似乎它们仍未按预期完全正常工作。
但我也想将我的网址重写为更好的网址。我认为我的规则是正确的,并且:443中的重写块看起来像下面的
RewriteEngine on
RewriteCond %{HTTP_HOST} !www.domain.com
RewriteRule ^(.*)$ https://www.domain.com$1 [R=301]
RewriteRule ^subpage/(.+)/?$ subpage.html?$1 [NC]
哪个应该重写
https://www.domain.com/subpage/2 - &gt; https://www.domain.com/subpage.html?2但它现在只是指向我的404文件。
这可能是显而易见的,但我没有看到我的错误。
答案 0 :(得分:0)
注意:这并没有解决此处所述的问题,但确实解决了潜在的问题。
由于这是一个生产环境(多么尴尬。)我的网络服务器开始时很快就被淹没了。我的公司大大增加了我的预算(我们期待很多流量,但希望它会慢慢积累,但它没有)所以我能够设置多个服务器并在它们前面放置2个HAProxy负载均衡器。我使用HAProxy配置来解决我的问题:
frontend http
bind MY_IP:80
redirect prefix http://www.domain.com code 301 if { hdr(host) -i domain.com }
redirect scheme https code 301 if !{ ssl_fc }
frontend https
bind MY_IP:443 ssl crt /etc/haproxy/certs/domain.com.pem
redirect prefix https://www.domain.com code 301 if { hdr(host) -i domain.com }
reqadd X-Forwarded-Proto:\ https
default_backend app_pool
backend app_pool
balance roundrobin
redirect scheme https if !{ ssl_fc }
server app-1 MY_IP:80 check
server app-2 MY_IP:80 check
server app-3 MY_IP:80 check
server app-4 MY_IP:80 check
将始终重定向到www.domain.com版本并强制执行HTTPS。在我看来,在HAProxy中进行设置比使用VirtualHost更容易。