WordPress中get_template_directory_uri()仅返回http不返回https问题求助
Fixing Mixed Content Errors from
get_template_directory_uri() Not Returning HTTPS 我来帮你解决这个混合内容的问题——这在WordPress刚启用SSL后是个很常见的小坑。你的站点已经装了SSL、其他功能都正常,但get_template_directory_uri()还在输出HTTP链接,直接触发了浏览器的混合内容警告。下面是几个靠谱的解决办法:
1. 先检查WordPress的核心URL设置
这是最基础也最容易忽略的一步:
- 登录WordPress后台,进入设置 > 常规页面
- 确认**WordPress地址(URL)和站点地址(URL)**都已经改成
https://www.bearapeninsula.com - 保存更改后,清空浏览器缓存和WordPress缓存(如果用了缓存插件的话),再刷新页面看看链接是否正常
2. 通过wp-config.php强制SSL
如果修改后台设置后问题还在,可以直接在wp-config.php文件里添加代码,强制WordPress全站使用HTTPS:
// 强制后台使用SSL define('FORCE_SSL_ADMIN', true); // 处理反向代理/CDN的HTTPS检测 if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { $_SERVER['HTTPS'] = 'on'; } // 直接指定站点的HTTPS地址 define('WP_HOME', 'https://www.bearapeninsula.com'); define('WP_SITEURL', 'https://www.bearapeninsula.com');
这段代码会让WordPress的核心函数(包括get_template_directory_uri())默认输出HTTPS链接,同时确保后台也通过HTTPS访问。
3. 用过滤器手动修正链接
如果上面的方法都没起效,可以通过WordPress的template_directory_uri过滤器来手动替换HTTP为HTTPS:
在你当前主题的functions.php文件中添加以下代码:
add_filter('template_directory_uri', 'convert_template_uri_to_https', 10, 3); function convert_template_uri_to_https($url, $template, $theme_root) { // 检查当前是否是HTTPS环境 if (is_ssl()) { $url = str_replace('http://', 'https://', $url); } return $url; }
这个函数会自动检测当前是否处于HTTPS连接,然后把get_template_directory_uri()返回的链接替换成HTTPS版本。
4. 确保服务器配置了HTTPS重定向
最后,检查你的服务器是否配置了自动把HTTP请求重定向到HTTPS:
- Apache服务器:在站点根目录的
.htaccess文件中添加以下规则(放在WordPress默认的Rewrite规则之前):
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
- Nginx服务器:在你的站点配置文件中添加以下server块:
server { listen 80; server_name bearapeninsula.com www.bearapeninsula.com; return 301 https://$server_name$request_uri; }
完成以上操作后,记得清空所有缓存(浏览器缓存、WordPress缓存插件、CDN缓存),然后刷新页面检查控制台的混合内容错误是否消失。
内容的提问来源于stack exchange,提问作者Faiz Ali
相关产品推荐
相关产品推荐

