我已经尝试让它工作了几个小时,但似乎没有什么效果。我已经启动并运行了一个 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;
}