将 www 重定向到 https:// 需要 AllowOverride 还是可以全局设置?
Posted
技术标签:
【中文标题】将 www 重定向到 https:// 需要 AllowOverride 还是可以全局设置?【英文标题】:Does redirecting www to https:// require AllowOverride or can it be set globally? 【发布时间】:2015-10-26 20:28:48 【问题描述】:我正在尝试更改我确定不是最佳的 apache2 服务器配置。现在我将所有 AllowOverride 设置为 None。我想保留该配置以设置全局规则并增加页面加载时间。
但是,现在的问题是我使用单独的虚拟主机和目录以及 .php 文件将 www.example.com 重定向到 https://www.example.com。我确信这不是最优的。我更喜欢使用 mod_overwrite。
根据我的阅读,像下面这样的规则集可以实现这一点。但是,如果我想保留 AllowOverride None,我想知道在哪里放置此代码。
RewriteCond %HTTPS off
# First rewrite to HTTPS:
# Don't put www. here. If it is already there it will be included, if not
# the subsequent rule will catch it.
RewriteRule .* https://%HTTP_HOST%REQUEST_URI [L,R=301]
# Now, rewrite any request to the wrong domain to use www.
RewriteCond %HTTP_HOST !^www\.
RewriteRule .* https://www.%HTTP_HOST%REQUEST_URI [L,R=301]
我相信,如果我在正确的位置添加这样的规则集,我还可以禁用我用来重定向的附加虚拟主机。
【问题讨论】:
【参考方案1】:你应该把重写规则放在一个
<Directory /some/where>
[...]
</Directory>
阻塞在 apache 配置中。因此,您不需要任何 .htaccess 文件,因此无需更改 AllowOverride。
【讨论】:
我最终将这些确切的代码行添加到虚拟主机中,该虚拟主机指向另一个目录,其中的 php 文件再次指向 https:// 。这解决了问题。 您说要删除虚拟主机,所以我选择了<Directory>
标签。您不需要任何 php 文件(如果请求引用 / 或 /index.php 以外的任何内容,则不会被命中)或其他虚拟主机(端口 80 和 443 的一个/s 除外)。查阅apache文档,内容非常全面,条理清晰。以上是关于将 www 重定向到 https:// 需要 AllowOverride 还是可以全局设置?的主要内容,如果未能解决你的问题,请参考以下文章
将 https 重定向到非 www 和 http 到 www
IIS 将 www 重定向到非 www 和 http 到 https:是不是可以仅使用一个重定向来完成?
将 www 重定向到 https:// 需要 AllowOverride 还是可以全局设置?