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”)的path被重写为index.php?q = [path]。

但是,恰巧我在网站上有几个子目录,它们是包含index.php文件的“真正的”子目录。 我想testing是否有任何给定的子目录确实有一个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; } 

那也行不通。 我无法弄清楚我做错了什么?

logging:我的configuration文件是Drupal&nginx:一个健全的“通用”configuration?

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

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

 index index.php index.html 

那么你的configuration应该几乎保持不变,但也有$uri/ check:

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