apache配置https并启用伪静态需三步:启用mod_rewrite模块、设置allowoverride all允许.htaccess生效、在.htaccess中合并https强制跳转(rewritecond %{https} off)与伪静态路由(rewritecond !-f !-d → index.php?s=/$1),并配好443端口ssl虚拟主机及证书。

Apache 配置 HTTPS 并启用伪静态,核心是三件事:开启 rewrite 模块、允许 .htaccess 覆盖规则、在规则中统一处理跳转与路由。不是先配 HTTPS 再配伪静态,而是把它们放在同一套逻辑里协同工作——HTTPS 是协议层,伪静态是 URL 层,两者互不冲突,但顺序和条件判断很关键。
一、确认 rewrite 模块已启用
伪静态依赖 mod_rewrite,必须确保它已加载:
- 打开 httpd.conf(路径通常为
/etc/httpd/conf/httpd.conf或Apache/conf/httpd.conf) - 查找这一行:
#LoadModule rewrite_module modules/mod_rewrite.so - 去掉开头的
#,保存文件
二、允许网站目录读取 .htaccess
Apache 默认禁止 .htaccess 生效,需显式授权:
- 在 httpd.conf 中找到对应网站根目录的
<directory></directory>块,例如:<directory></directory> - 将其中的
AllowOverride None改为AllowOverride All - 同时确保有
Require all granted(Apache 2.4+ 必须项)
三、根目录下创建 .htaccess 并写入完整规则
把 HTTP 强制跳转 HTTPS 和伪静态路由合并写在一个文件里,避免重复重定向或规则冲突:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteBase /
<h1>【HTTPS 跳转】只对非 443 端口(即 HTTP)发起 301 重定向</h1>
<p>RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ <a href="https://www.php.cn/link/fe11fd4030d827a13e7e5593851e0040">https://www.php.cn/link/fe11fd4030d827a13e7e5593851e0040</a>} [R=301,L]</p>
<h1>【伪静态路由】跳过真实存在的文件/目录,其余请求交由 index.php 处理</h1>
<p>RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L]
</p></ifmodule>
说明:
-
RewriteCond %{HTTPS} off比%{SERVER_PORT} !=443更可靠,兼容反向代理场景 -
[R=301,L]表示永久跳转且终止后续规则,防止和伪静态规则打架 -
index.php?s=/$1是 ThinkPHP、易优CMS 等常见框架的入口写法;WordPress 则用index.php,Discuz! 用index.php加参数,按实际程序调整
四、SSL 虚拟主机配置不能漏
仅靠 .htaccess 无法启用 HTTPS,必须在 Apache 配置中定义 443 端口的虚拟主机,并加载证书:
- 在
httpd.conf或extra/httpd-ssl.conf中添加<virtualhost></virtualhost>块 - 确保包含
SSLEngine on及证书三件套(SSLCertificateFile、SSLCertificateKeyFile、SSLCertificateChainFile) - 该虚拟主机的
DocumentRoot和<directory></directory>设置需与 HTTP 端口一致,否则 .htaccess 不生效
配置完全部步骤后,重启 Apache:sudo systemctl restart httpd(CentOS)或 sudo service apache2 restart(Ubuntu)。访问 http 地址会自动跳到 https,且所有伪静态 URL(如 /article/123)能正常解析,不带 index.php。










