我的任务是将两个基于Drupal的网站迁移到新服务器上,不是因为我是Drupal专家,而是我是办公室中唯一拥有PHP编程技能的人。一个是Drupal 7站点,另一个是Drupal 8站点。它们都是作为DevDesktop存档和SQL转储提供给我的。 Drupal 7站点非常简单-将docroot的内容复制到新服务器,创建并填充新的MySQL数据库,并编辑默认站点设置文件以指向新的dbase。因此,Drupal 7网站工作正常。在Drupal 8网站上做同样的事情,主要的问题似乎是它不会加载任何CSS或Javascript。
在Javascript控制台中,它使我略有气味,因为它说CSS的mime类型不正确,但进一步检查是因为CSS的路径返回了404。
造成问题的是Antibot,并且由于Java代码没有加载,尽管我具有管理员用户的用户名和密码,但由于Antibot不断将我发送回首页告诉我启用Javascript,所以我无法登录。我已经编辑settings.php以启用/core/rebuild.php并尝试了该操作,但似乎没有任何区别。我也手动截断了“ cache _...”表,这似乎也不起作用。请注意,我无权在新服务器上访问SSH,因此不能使用drush。
Refused to apply style from '[]' because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled.
Failed to load resource: the server responded with a status of 404 (Not Found)
在我的非专家眼中,它的确看起来像是配置了Drupal来从虚拟目录/ css /和/ js /中存储优化版本的CSS和JS,尽管这些路径实际上并不存在于服务器。我检查了.htaccess文件,但是除了将gzip压缩版本提供给支持gzip的浏览器的一些巧妙方法之外,看不到任何可以将服务器保存到正确文件的内容。也许如果有人可以解释Drupal如何将请求路由到/ css /或/ js /到正确的文件,那将有助于我进一步理解。
最终,我认为这个问题是因为Drupal 8希望提供优化的文件,但是缓存被搞砸了,Antibot不会让我进入管理员来关闭聚合。
我拥有对服务器文件和数据库的完全访问权限,但没有权限。除了通过管理菜单以外,是否有其他方法可以关闭CSS和JS聚合?
答案 0 :(得分:0)
在这种情况下,您可以禁用聚合:
通过编辑settings.php或settings.local.php:
/**
* Disable CSS and JS aggregation.
*/
$config['system.performance']['css']['preprocess'] = FALSE;
$config['system.performance']['js']['preprocess'] = FALSE;
或通过sql,但是您必须对config表中的blob数据进行解码和反序列化才能进行更改,然后进行相反的处理:
# Query :
SELECT name, CONVERT (`data` USING utf8) FROM config WHERE `name`='system.performance';
# Unserialize query output and edit data locally
$config = unserialize($output);
$data['css']['preprocess'] = FALSE;
$data['js']['preprocess'] = FALSE;
# Then serialize data and write it back into the config table
# (original encoding is probably `LONGBLOB` but it may differ depending on the backend).
一旦您可以进入服务器,则需要在sites/default/files/
下重置权限和所有权,然后才能再次启用聚合:
mkdir -p sites/default/files/{css,js}
chown -R apache:apache sites/default/files/
chmod -R 0755 sites/default/files/
您可能还想检查是否根据这些资源的实际位置正确设置了公共文件路径设置(在 settings.php 中):
$settings['file_public_path'] = 'sites/default/files';