我的设置相当复杂。至少对我来说,因为我对 apache、mod_rewrite 和所有这些东西都不熟悉。
我想要的是这个:
- 删除所有 www 前缀
- 将所有子域名重定向到 https,因此,排除域名本身(foo.bar.com,但不包括 bar.com)
- 将所有对子域的请求代理到域的 8089 端口
因此,我编写了一个代码,除了 www.foo.bar.com 之外,该代码基本可以正常工作。我现在正在编写一个新的代码。
问题是,我不知道按照什么顺序才能正常工作。我应该先删除 www 吗?还是应该在顶部设置代理?
这是我目前的新文件。
我希望有人能帮助我把东西清理干净。
# welcome page
<VirtualHost *:80>
ServerName bar.com
DocumentRoot /var/www/bar
</VirtualHost>
# ssl and proxy for subdomains
<VirtualHost *:443>
ServerName foo.bar.com
ServerAlias *.bar.com
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
ProxyRequests Off
ProxyPass / http://bar.com:8089/
ProxyPassReverse / http://bar.com:8089/
ProxyVia On
</VirtualHost>
<VirtualHost *:80 *:443>
ServerName bar.com
ServerAlias *.bar.com
# remove www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301]
# redirect https://bar.com -> http://bar.com
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^bar.com$ [NC]
RewriteRule ^ http://bar.com%{REQUEST_URI} [L,R=301]
# redirect http -> https
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301]
ErrorLog /var/log/foo/foo-error.log
CustomLog /var/log/foo/foo-access.log combined
LogLevel warn
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
</VirtualHost>
################
# restrictions #
################
<Location /web/database>
Order deny,allow
Deny from all
Allow from 1.2.3.4
</Location>