如何自动执行此nginx重写规则?

时间:2014-01-10 12:49:35

标签: apache .htaccess nginx rewrite subdirectory

我害怕自己在我头上。我确定我错过了一些简单的东西,但到目前为止它还没有点击。任何帮助将不胜感激。

我有一个域名,其中包含许多微型网站,结构如下:

  • domain.com/site1
  • domain.com/site2
  • domain.com/site3
  • ...

我正在从Apache转换到Nginx。当我使用Apache时,这是一组重写规则,适用于我想要的多个文件夹。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1#%{REQUEST_URI} ([^#]*)#(.*)\1$
RewriteRule ^(.*)$ %2index.php [QSA,L]

此时,我可以使用个别规则让网站正常工作。但对我的情况来说,这并不是一个可行的解决方案。

location /site1 {
    try_files $uri $uri/ /site1/index.php?$args;
}
location /site2 {
    try_files $uri $uri/ /site2/index.php?$args;
}
location /site3 {
    try_files $uri $uri/ /site3/index.php?$args;
}

必须有更好的方法。我只是和Nginx一样,我无法弄明白。在此先感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

在我的第一个回答中回复后,我已将其更改为此,不知道您是否需要$suburi,但是为了以防万一。

server {
  server_name example.com;
  index index.php; # need this
  location / {
    try_files $uri $uri/ /index.php;
  }
  location ^~ (?<subfolder>/[^/]+)(?<suburi>.+) {
    try_files $uri $uri/ $subfolder/index.php$is_args$query_string;
  }
}

替代没有命名的捕获块

  location ^~ (/[^/]+)(.+) {
    try_files $uri $uri/ $1/index.php$is_args$query_string;
  }

答案 1 :(得分:1)

我终于找到了一个解决方案:https://github.com/rtCamp/easyengine/issues/31

set $dir "";
if ($request_uri ~ ^/([^/]*)/.*$ ) {
  set $dir1 /$1;
}
location / {
  try_files $uri $uri/  $dir1/index.php?$args;
}

答案 2 :(得分:0)

我想到这样的事情:

location ~ ^/(.*)/*.*$ {
    try_files $uri $uri/ /$1/index.php?$args;
}