我害怕自己在我头上。我确定我错过了一些简单的东西,但到目前为止它还没有点击。任何帮助将不胜感激。
我有一个域名,其中包含许多微型网站,结构如下:
我正在从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一样,我无法弄明白。在此先感谢您的帮助。
答案 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;
}