在子文件夹

时间:2018-03-23 14:56:17

标签: nginx multisite

我有2个网站都可以在同一个网址上访问,只有一个可以从这样的子文件夹访问:

website.com /

website.com/blog

现在他们在Apache下运行,我想切换到Nginx,我偶然发现了这种方法中Nginx的重写规则。

托管服务器是带有Plesk的Ubuntu,因此我需要编辑的唯一部分是负责基于URL格式重写的部分。

最初的出发点是这一点:

if (!-e $request_filename) {
    set $test P;
}
if ($uri !~ ^/(plesk-stat|webstat|webstat-ssl|ftpstat|anon_ftpstat|awstats-icon|internal-nginx-static-location)) {
    set $test "${test}C";
}
if ($test = PC ) {
    rewrite ^/(.*)$ /index.php?$1;
}

这适用于主网站,但位于博客的网站会显示主页,但任何其他内页都会返回404错误。

因此,我对此采取的第一种方法是:

if (!-e $request_filename) {
    set $test P;
}
if ($uri !~ ^/(plesk-stat|webstat|webstat-ssl|ftpstat|anon_ftpstat|awstats-icon|internal-nginx-static-location)) {
    set $test "${test}C";
}
if ($uri ~ ^/(*blog*)) {
    set $test "B";
}
if ($test = PC ) {
    rewrite ^/(.*)$ /index.php?$1;
}
if ($test = B ) {
    rewrite ^/(.*)$ /blog/index.php?$1;
}

但是这不起作用所以我尝试了一种基于这样的位置的方法:

location  / {

if (!-e $request_filename) {
    set $test P;
}
if ($uri !~ ^/(plesk-stat|webstat|webstat-ssl|ftpstat|anon_ftpstat|awstats-icon|internal-nginx-static-location)) {
    set $test "${test}C";
}
if ($test = PC ) {
    rewrite ^/(.*)$ /index.php?$1;
}

}


location ~ /blog {

root httpdocs/blog

if (!-e $request_filename) {
    set $test P;
}
if ($uri !~ ^/(plesk-stat|webstat|webstat-ssl|ftpstat|anon_ftpstat|awstats-icon|internal-nginx-static-location)) {
    set $test "${test}C";
}
if ($test = PC ) {
    rewrite ^/(.*)$ /index.php?$1;
}

}

1 个答案:

答案 0 :(得分:0)

它适用于当前配置:

if (!-e $request_filename) {
    set $test P;
}
if ($uri !~ ^/(plesk-stat|webstat|webstat-ssl|ftpstat|anon_ftpstat|awstats-icon|internal-nginx-static-location|blog)) {
    set $test "${test}C";
}
if ($uri ~ ^/(blog)) {
    set $test "${test}B";
}
if ($test = PC ) {
    rewrite ^/(.*)$ /index.php?$1;
}
if ($test = PB ) {
    rewrite ^/(.*)$ /blog/index.php?$1;
}