我们设置了一些子域,我想简化一些 Apache 配置 - 特别是因为这些特定的子域是易变的。无论如何,我正在尝试获取包含主机的重写规则。
到目前为止,我已经得到:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.*).net.au$
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%1.net.au$1 [R=302,L]
这是基于https://stackoverflow.com/questions/3634101/url-rewriting-for-different-protocols-in-htaccess和http://httpd.apache.org/docs/2.4/rewrite/vhosts.html
但是,第一个条件中的模式没有写入重写地址,最终我被发送到 .net.au/wherever(不允许我在前面使用 https 发布)——我错过了什么吗?
在 Ubuntu 14.04 上运行 apache 2.4
答案1
Ladadadada 建议的简单案例是当请求主机和目标主机之间的域名相同时起作用:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=302,L]
然而,额外的困难是我还需要http:// sub-domain.local
重定向到http:// sub-domain.net.au
- 因此使用%{HTTP_HOST}
是不够的。
我再次看了一些例子,并意识到%1反向引用似乎仅适用于RewriteRule之前紧接着的RewriteCond。
我重新排列了顺序:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(.*)(.local|.net.au)$
RewriteRule ^(.*)$ https://%1.net.au$1 [R=302,L]
重定向效果很好