Nginx:将“/subdir1”重写为“/subdir/index.php”

Nginx:将“/subdir1”重写为“/subdir/index.php”

我已经尝试让它工作了几个小时,但似乎没有什么效果。我已经启动并运行了一个 Drupal 网站,默认位置如下:

# Default location
location / {
  try_files $uri @rewrite;
}

location @rewrite {
  rewrite_log on;
  rewrite ^/(.*)$ /index.php?q=$1;
}

这种方法效果很好,最终结果是所有不直接指向根目录的路径(例如“example.com/subdir1”和“example.com/subdir1/subdir2”)都被重写为 index.php?q=[path]。

但是,我网站上有几个子目录是包含 index.php 文件的“真实”子目录。我想要测试任何给定的子目录是否确实有 index.php,然后运行它。这是我的尝试之一,我认为它会起作用:

# Default location
location / {
  try_files $uri @subdir @rewrite;
}

location @subdir {
  rewrite_log on;
  rewrite ^/(.*)$ $1/index.php;
}

location @rewrite {
  rewrite_log on;
  rewrite ^/(.*)$ /index.php?q=$1;
}

但是,它不起作用。我也尝试过:

# Default location
location / {
  try_files $uri $uri/index.php @rewrite;
}

location @rewrite {
  rewrite_log on;
  rewrite ^/(.*)$ /index.php?q=$1;
}

那也没用。我不知道我做错了什么?

记录一下:我的配置文件是Drupal 和 nginx:合理的“通用”配置?

答案1

您需要告诉 nginx 使用 index 来查找 index.php 文件。http://wiki.nginx.org/HttpIndexModule

将其添加到服务器、http 或位置块:

index index.php index.html

然后你的配置应该几乎保持不变,但$uri/也要检查:

# Default location
location / {
  try_files $uri $uri/ @rewrite;
}

location @rewrite {
  rewrite_log on;
  rewrite ^/(.*)$ /index.php?q=$1;
}

相关内容