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

如何配置Nginx Location块实现Drupal7域名子路径内部重写

Drupal 7 Nginx 内部重写配置解决方案

直接可用的正确配置

你的核心问题是原配置指向了不存在的/test/index.php,导致404错误。以下配置可实现访问/test时内部转发到网站根目录,且不会发送301/302跳转:

# 处理/test开头的请求
location ^~ /test {
    # 内部重写:移除/test前缀,将剩余路径传给根目录的index.php
    rewrite ^/test(/.*)?$ /index.php?q=$1 last;
}

# 根目录的常规Drupal请求处理(原有配置缺失时补充)
location / {
    try_files $uri $uri/ /index.php?$query_string;
}

# PHP处理配置(根据你的PHP版本调整fastcgi_pass路径)
location ~ \.php$ {
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

如果只需要访问/test时直接对应根目录首页,可简化rewrite规则:

location ^~ /test {
    rewrite ^/test$ /index.php last;
}

原配置失效原因

你之前的rewrite规则把请求导向了/test/index.php,但Drupal的入口文件index.php实际在网站根目录(比如/var/www/html/index.php),不存在/test/index.php文件,这就是PHP日志中出现404错误的根本原因。

Drupal 配套配置调整

修改sites/default/settings.php文件:

  • 设置$base_url = 'https://www.example.com';(填写网站根域名,不要添加/test后缀)
  • 若未开启干净URL,补充$conf['clean_url'] = 1;

自我调试方法

  • 开启Nginx调试日志:在nginx.conf中添加error_log /var/log/nginx/error.log debug;,重启Nginx后访问/test,日志会清晰展示请求的重写、路径查找全过程
  • curl测试请求:执行curl -v http://www.example.com/test,查看响应头确认无301/302跳转,响应码应为200
  • 验证配置合法性:每次修改配置后执行nginx -t,确保语法无误再重启Nginx
  • 检查文件路径:确认网站根目录下的index.php存在,且/test目录不存在(若存在,Nginx会优先读取该目录下的文件,干扰内部重写逻辑)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:35:01