You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drupal 7.36从HTTP迁移至HTTPS后CSS/JS失效问题求助

兄弟,我之前处理过好几个Drupal 7迁HTTPS的坑,你的情况一看就是几个常见配置没跟上,结合你说的本地正常、生产环境CSS/JS还指向HTTP,还有主题路径的差异,给你一步步捋:

1. 先把Drupal核心配置拉回正轨

首先得确保生产环境的sites/default/settings.php(你说HTTPS环境用的是这个目录)里的基础URL是硬指定的HTTPS地址,别让Drupal自动判断出错:

$base_url = 'https://example.com'; // 替换成你的实际域名

然后登录Drupal后台,依次去:

  • 配置 → 系统 → 站点信息:把「站点URL」改成https://example.com,别留HTTP的地址
  • 配置 → 媒体 → 文件系统:检查公共文件路径,用相对路径(比如sites/default/files),别写死http://example.com/sites/default/files
2. 主题资源路径的坑要填

你提到HTTP环境主题在sites/all/themes/MYTHEME,生产HTTPS环境是sites/default?这里大概率是主题里的CSS/JS引用写死了HTTP地址,或者用了绝对路径但没适配HTTPS。

  • 打开主题的模板文件(比如page.tpl.php),检查所有资源引用:别直接写<link href="http://example.com/sites/all/themes/MYTHEME/style.css">,换成Drupal自带的函数生成路径,比如:
    $theme_path = drupal_get_path('theme', 'MYTHEME');
    print '<link rel="stylesheet" href="' . file_create_url($theme_path . '/style.css') . '">';
    
    用file_create_url()会自动根据当前站点的协议(HTTP/HTTPS)生成正确的路径。
  • 如果用了CSS/JS聚合功能,一定要去配置 → 性能里清空所有聚合缓存,甚至直接关掉聚合先测试,没问题再开。
3. 服务器端的配置补全

你给的mod_expires配置没问题,但要确保服务器的HTTPS相关模块和虚拟主机配置正确:

  • 确认服务器启用了mod_ssl和mod_rewrite模块(Apache环境下)
  • 虚拟主机的HTTPS配置要包含Drupal的重写规则,比如:
    <VirtualHost *:443>
        ServerName example.com
        DocumentRoot /path/to/your/drupal/root
        SSLEngine On
        SSLCertificateFile /path/to/your/certificate.crt
        SSLCertificateKeyFile /path/to/your/private.key
    
        # 你的mod_expires配置可以放在这里
        <IfModule mod_expires.c>
            ExpiresActive On
            ExpiresDefault A1209600
            <FilesMatch \.php$>
                ExpiresActive Off
            </FilesMatch>
        </IfModule>
    
        # 确保Drupal的URL重写生效
        <Directory /path/to/your/drupal/root>
            AllowOverride All
            RewriteEngine On
            RewriteBase /
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
        </Directory>
    </VirtualHost>
    
  • 还要在Drupal根目录的.htaccess里加上HTTP转HTTPS的强制跳转,放在默认重写规则之前:
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
4. 数据库里的旧URL要清干净

Drupal的数据库里大概率藏了很多硬编码的HTTP地址(比如节点内容、区块、主题设置),得批量替换:

  • 如果你用Drush的话,直接跑这几个命令(记得替换成你的域名):
    # 替换变量表中的URL
    drush sqlq "UPDATE variable SET value = REPLACE(value, 'http://example.com', 'https://example.com');"
    # 替换节点内容里的URL
    drush sqlq "UPDATE node_revision SET body = REPLACE(body, 'http://example.com', 'https://example.com');"
    drush sqlq "UPDATE field_data_body SET body_value = REPLACE(body_value, 'http://example.com', 'https://example.com');"
    
  • 怕直接改数据库出错的话,也可以装个「Search and Replace」模块,可视化替换所有旧URL,更安全。

最后别忘了清空Drupal所有缓存!后台点「配置 → 性能 → 清空所有缓存」,或者用drush cache-clear all,Drupal 7的缓存真的很顽固,不清的话改了也白搭。

内容的提问来源于stack exchange,提问作者Ashish Kumar Saxena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:12:27