Nginx sub_filter 不替换字符串。

nginx 配置:

location / {
    proxy_pass https://internal.domain.tld:8081/phpmyadmin/;
    rewrite ^/phpmyadmin/(.*) /$1;

    proxy_set_header X-Forwarded-Path '/';
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host:$server_port;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Real-IP $remote_addr;

    # Rewrite internal redirects
    sub_filter_once off;
    sub_filter '/phpmyadmin/' '/';

    proxy_redirect /phpmyadmin/ /;

    client_max_body_size 100M;

    proxy_cookie_path /phpmyadmin/ /;
}

html 中应该被替换的内容:

<head>
...
<script data-cfasync="false" type="text/javascript">
// <![CDATA[
CommonParams.setAll({common_query:"lang=en",...is_https:true,rootPath:"/phpmyadmin/",...user:"root"});
var firstDayOfCalendar = '0';
...


最佳答案
1

如果您唯一的目标是正确设置 PHPMyAdmin 根 URL,那么您应该将$cfg['PmaAbsoluteUri']配置值设置为https://example.com/phpmyadmin

这将告诉 PHPMyAdmin 使用什么基本 URL 来生成所有 URL。

然后您可以删除所有sub_filterproxy_redirectproxy_cookie_path指令。

3

  • 不,我的目标是使用 sub_filter 来做到这一点,而完全不触及 phpmyadmin 配置。


    – 

  • 使用sub_filter并不是合适的解决方案。问题是您无法轻松地告诉它仅更改所需的实例。例如,如果页面可见内容应该包含/phpmyadmin/在其中,那么使用 就不可能sub_filter


    – 

  • 我不是在寻求正确的解决方案,而是在问为什么它不起作用。


    –