当前位置: 首页 > 知识库问答 >
问题:

在nginx中将根地址重写为子目录

霍鸣
2023-03-14

我正在转换我的media wiki站点,使用nginx作为静态文件的前端,在PHP后端有apache。到目前为止,我已经得到了所有的工作,除了当我查看根目录“example.com”时,它试图提供一个目录列表,并给出一个403错误,因为我已经禁用了它,并且那里没有索引文件。

我现在使用的apache重写规则很简单:

RewriteRule ^$ /wiki/Main_Page [L]

我在nginx中尝试了类似的location指令,但它不起作用:

location = / {
    rewrite "^$" /wiki/Main_Page;
}

我的位置指令的其余部分是:

location / {
    try_files $uri $uri/ @rewrite;
}

location @rewrite {
    rewrite ^/wiki/(.*)$ /w/index.php?title=$1&$args;
}

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    try_files $uri /w/index.php?title=$1&$args;
    expires max;
    log_not_found off;
}

location ~ \.php?$ {
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_pass http://127.0.0.1:8080;
}

我可以简单地放一个索引。php文件,其中包含头('Location:'),但我宁愿使用重写规则来正确地执行它。

我在网上找到的所有使用nginx运行media wiki的例子都将wiki作为wiki.example.com而不是 /wiki/子目录运行。

编辑:我还尝试向try_文件添加如下内容:try_文件$uri$uri/@rewrite/wiki/Main_页 具有相同的403错误结果。


共有3个答案

竺捷
2023-03-14

>

  • 确保可以成功访问“/wiki/Main_Page”
  • 检查服务器部分,没有全局重写规则。服务器部分中的重写规则将在位置部分之前执行
  • 在位置部分使用重写规则,如下所示:

    location = / {
         rewrite "^.*$" /wiki/Main_Page break;    
    }
    

    注意这里的“断”。意味着打破重写循环。

    如果此页面位于后端服务器中,则此处应使用代理传递。

  • 东门令
    2023-03-14

    我更喜欢使用:

    location = / {
        return 301 http://$host/wiki/Main_Page;
    }
    
    秦博达
    2023-03-14

    我在nginx irc聊天中找到了帮助。

    基本上,我需要做的是使用返回而不是重写。所以我改变了这个:

    location = / {
        rewrite "^$" /wiki/Main_Page;
    }
    

    为此:

    location = / {
        return 301 http://www.example.com/wiki/Main_Page;
    }
    
     类似资料:
    • 我已经使用以下指南创建了一个简单的spring-boot SOAP webservice:https://spring.io/guides/gs/production-web-service/ 我正在将它部署到云服务中,但在它前面将有一个API管理层。 我正在用Maven构建。在这两种情况下,应用程序承载的WSDL都用它运行的服务器(例如http://localhost:8080/)替换主机名,然

    • 本文向大家介绍nginx地址重定向的方法,包括了nginx地址重定向的方法的使用技巧和注意事项,需要的朋友参考一下 1、假设要把webroot/static/index.html访问重定向到static/index.html 例如当我们通过浏览器访问http://192.168.11.210/webroot/static/index.html,实际访问的是web目录下面的static/index.

    • 我有一个有趣的故事。我的根目录上的htaccess配置如下所示: 所以我真正的道路是这样的: 但是. htaccess把这个路径翻译成这样: 效果很好,但如果我打本地的话。com我想把它转发到本地。com/home。如果我打本地电话。com/随便你怎么说。 如何使用此配置执行此操作?提前谢谢。 另外,我如何强制所有内容都使用https?

    • 问题内容: 给定CIDR地址,例如 如何确定面膜长度?() 如何确定掩码地址?() 如何确定网络地址?() 问题答案: 它由apache utils涵盖。 请参阅以下URL:http : //commons.apache.org/proper/commons- net/apidocs/org/apache/commons/net/util/SubnetUtils.html 注意:对于使用// 32

    • X1.1新增 sp_get_theme_path() 功能: 获取当前模板的地址 参数: 无 返回: 类型string 当前模板的地址,如当前模板是simplebootx,则返回/themes/simplebootx/

    • 我的主域名绑定到我的public_html文件夹,但我使用. htaccess重定向将根目录更改为文件夹中的子目录,以便更容易托管多个网站。示例: 根目录中的. htaccess文件如下: 这很好,但我认为这和这个有问题。我的site1目录中的htaccess文件。如果我输入URL,它有时会重定向到示例。com/site1。因此,该网站在示例中看起来完全相同。com和示例。com/site1,但我