You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Drupal 8.5.0中启用Clean URLs及修复相关警告

刚巧我之前在Drupal 8.5.0上折腾过Clean URLs,给你一步步捋清楚怎么启用,还有那些常见警告的解决办法:

一、启用Clean URLs的完整步骤
  • 第一步:确认服务器的rewrite配置(Apache环境)
    这是最基础的前提,Clean URLs依赖Apache的mod_rewrite模块。
    • 如果是Ubuntu/Debian系统,直接执行命令启用模块:sudo a2enmod rewrite,然后重启Apache:sudo systemctl restart apache2
    • 如果是CentOS/RHEL,需要编辑httpd.conf文件,找到#LoadModule rewrite_module modules/mod_rewrite.so这一行,把前面的#删掉,然后重启httpd服务:sudo systemctl restart httpd
    • 还要确保站点的虚拟主机配置里,AllowOverride设置为All,这样Drupal的.htaccess才能生效。比如:
      <Directory /var/www/html/your-drupal-site>
          AllowOverride All
          Require all granted
      </Directory>
      
  • 第二步:配置Drupal的.htaccess文件
    进入Drupal根目录,默认会有一个.htaccess.txt文件,把它重命名为.htaccess。如果已经存在.htaccess,检查里面的RewriteBase设置:
    • 如果你的Drupal安装在域名根目录(比如http://example.com),就设置为RewriteBase /
    • 如果在子目录(比如http://example.com/drupal),就改成RewriteBase /drupal/
  • 第三步:在Drupal后台启用Clean URLs
    登录后台后,进入配置 > 搜索引擎优化 > 干净URL(路径是/admin/config/search/clean-urls),勾选“启用干净URL”选项,点击保存即可。如果看不到这个选项,说明前面的服务器配置有问题,先回头排查。
二、常见Clean URLs警告的解决方法

警告1:后台看不到Clean URLs启用选项,提示“无法验证Clean URLs”

  • 先重复检查mod_rewrite是否真的启用:可以创建一个phpinfo.php文件,内容为<?php phpinfo(); ?>,访问后搜索mod_rewrite,如果能找到说明模块已启用,否则重新执行启用步骤。
  • 检查.htaccess的权限:确保文件所有者是web服务器用户(比如www-data),权限设置为644。执行命令:
    sudo chown www-data:www-data .htaccess
    sudo chmod 644 .htaccess
    
  • 重启Apache/httpd服务,然后刷新Drupal后台页面,再尝试查看Clean URLs选项。

警告2:启用Clean URLs后访问页面出现404错误

  • 检查RewriteBase是否设置正确:很多时候404都是因为这个路径写错了,比如子目录的情况下没加子目录路径。
  • 清除Drupal缓存:进入后台配置 > 性能/admin/config/development/performance),点击“清除所有缓存”;如果安装了Drush,直接执行drush cr更快捷。
  • 测试服务器Rewrite规则:在Drupal根目录新建一个test.html,然后在.htaccess里添加一行RewriteRule ^my-test$ test.html,访问http://your-site/my-test,如果能打开test.html,说明Rewrite规则生效,问题可能出在Drupal配置或缓存。

警告3:后台提示“Clean URLs已启用,但服务器配置可能存在问题”

  • 检查.htaccess里的核心Rewrite规则是否完整,默认的规则应该包含这段(没被注释):
    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
    
  • 检查服务器的AllowOverride是否真的生效:如果虚拟主机配置里设的是AllowOverride None.htaccess里的规则根本不会被执行,必须改成AllowOverride All

如果还有其他特殊的警告信息,你可以把具体内容贴出来,再针对性排查~

内容的提问来源于stack exchange,提问作者Sani mori

火山引擎 最新活动