【问题标题】:How to properly force https and www with .htaccess如何使用 .htaccess 正确强制 https 和 www
【发布时间】:2015-04-06 11:22:44
【问题描述】:

我一直在尝试使用 apache .htaccess 规则来强制所有网址为https://www.
对于那些略过这个,请记住,由于多种原因,我不能在重写规则中使用“domain.com”。
例如:

https://domain.com to https://www.domain.com
http://domain.com to https://www.domain.com
http://www.domain.com to https://www.domain.com
但是……


在我的情况下,我有这么多域(由于是一个 wordpress 多站点),为每个单独的域添加规则确实效率低下。而且由于我在网络模式下使用wordpress MS,我有一些映射到基本url的站点,尤其是在尝试以mod重写以外的方式强制https时,这些站点似乎很容易崩溃..那么我需要确保所有域使用 www,但 MU 域映射不会从网络模式强制根站点使用 www ...这是一种允许通过 wp 多网络插件将站点分离到网络中的模式。所以这意味着我需要通过 mod 重写来强制执行此操作。
我在网上找到了这些变体,但我不确定最干净的方法是什么?

## force HTTPS and www RewriteCond %{HTTP_HOST} (?!^www\.)^(.+)$ [OR] RewriteCond %{HTTPS} off RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} !^(dev|www)\. [NC] RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI}/ [R=302,L] RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}/ [R=302,L]

RewriteCond %{HTTP_HOST} !^www\. [NC,OR] RewriteCond %{HTTPS} off RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI}/ [R=302,L]

完成此任务的最佳方法是什么? 谢谢

【问题讨论】:

    标签: wordpress .htaccess mod-rewrite


    【解决方案1】:

    您可以将这条规则用于所有 3 个条件:

    ## force HTTPS and www
    RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
    RewriteRule ^ https://www.%1%{REQUEST_URI} [L,R=302,NE]
    

    在新浏览器中测试时注释掉所有其他规则以避免旧浏览器缓存。

    【讨论】:

    • 嗨,我想你可能错过了我的主机条件@anubhava ...我无法在重写规则中单独识别每个域..它们变化太频繁而且太多了...... . 我想%{HTTP_HOST}%{REQUEST_URI} 需要完成这项工作?
    • 刚刚注意到 WP 标签。 WP 设置中的主页和站点 URL 到底是什么?
    • 这是我的 wp-config:
      define('WP_DEBUG', false); define('DISALLOW_FILE_EDIT', true); define('DISALLOW_FILE_MODS',false); define('WP_MEMORY_LIMIT', '512M'); define('WP_ALLOW_REPAIR', false); /* Multisite */ define( 'WP_ALLOW_MULTISITE', true ); define('MULTISITE', true); define('SUBDOMAIN_INSTALL', false); define('DOMAIN_CURRENT_SITE', $_SERVER['HTTP_HOST']); define('PATH_CURRENT_SITE', '/'); define( 'BP_ENABLE_MULTIBLOG', true ); 每个站点的主页和站点 URL 都不同...对于网络站点,它是“/”。
    • 这主要是一个 .htaccess 问题,wordpress 信息只是作为我可能不需要分享的背景信息。
    • 这造成了重定向循环并关闭了我的整个网络... .... ## force HTTPS and www RewriteCond %{HTTP_HOST} !^www\. [NC,OR] RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] RewriteRule ^ https://www.%1%{REQUEST_URI} [L,R=302,NE] 不起作用
    猜你喜欢
    • 2013-05-31
    • 2016-04-05
    • 2023-03-11
    • 1970-01-01
    • 2014-01-20
    • 2011-09-14
    • 2015-05-10
    • 2018-05-09
    • 1970-01-01
    相关资源
    最近更新 更多