localhost:8080始终重定向到localhost:3000

时间:2018-02-27 11:11:43

标签: wordpress macos docker localhost browser-sync

我有一个带有Docker的 WordPress开发环境。这么简单,只有一个docker与Wordpress和MySQL组成。

这是我的docker-compose文件。一切都很完美,起初我可以在 localhost:8080

中看到我的WordPress
version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    volumes:
      - /Users/ivan/Developer/theme:/var/www/html/wp-content/themes/theme
    environment:
      WORDPRESS_DB_PASSWORD: password

  mysql:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password

我还与Gulp一起使用浏览器同步来重新加载网站。我在浏览器同步设置中配置了代理,然后我可以在 localhost:3000 my_local_ip :3000中看到我的WordPress并重新加载。

browsersync: {
    browser: 'google chrome',
    proxy: "localhost:8080",
},

问题是我在WordPress网址设置中做了一些更改(然后我恢复了它)但现在重定向工作不好。

  • 如果我尝试转到localhost:8080或 my_local_ip :3000,则浏览器始终会重定向到localhost:3000并显示“太多重定向”错误。 (即使使用BrowserSync和Docker关闭)。

  • 在Docker和BrowserSync运行时, my_local_ip :3000 / wp-admin和localhost:3000 / wp-admin 完美运行,但我看不到我的博客。 localhost:3000始终显示错误

我已经尝试清除浏览器缓存,但没有解决它。我现在不知道 Docker BrowserSync MacOS (High Sierra是我的操作系统)的错误或配置错误

2 个答案:

答案 0 :(得分:0)

使用此代码更改浏览器同步选项:

const browserSync = require('browser-sync').create(); // npm install browser-sync --save-dev

const
// source and build folders
dir = {
  watch: 'source-theme/',
  build: 'build-theme/'
},

// Browsersync options:
const syncOpts = {
  port: 3000, 
  proxy: 'http://site1.ss',
  files: dir.watch + '**/*',
  open: true,
  notify: false,
  ghostMode: false,
  ui: {
    port: 8001, //default port 8080
    weinre: {
        port: 8002 //default weinre port 9090
    }
  },
};

// browser-sync task
gulp.task('browserSync', () => {
  browserSync.init(syncOpts);
});

有关更多信息,https://browsersync.io/docs/options

答案 1 :(得分:0)

我刚才遇到了同样的问题,并解决了。所以这是我的发现。

WordPress使用Host标头确定流量的来源,并根据配置集将其重定向。

由于您使用BrowserSync作为代理,BrowserSync会将localhost:8080标头值为Host的请求发送到localhost:8080,而不是您从何处发送请求。

所以首先要做的是让BrowserSync使用正确的主机。我们可以像这样从原始请求中获取主机

proxy: {
    target: 'http://localhost:8080/',
    proxyReq: [
        function(proxyReq, req, res) {
                proxyReq.setHeader('Host', req.headers.host);
        }
    ]
},

然后确保WordPress Address (URL)Site Address (URL)中的WP-Admin -> Settings -> General网址已正确设置

[host:port]/wp-admin/options-general.php

应该这样做。至少为我工作。