这个问题具有历史值(value),因此我将对其进行一些更新。这是Google中“webpack-dev-server WordPress重定向”的最佳结果。虽然公认的解决方案适用于Webpack 2,但它可能不再起作用。如果不是,您可以引用我的wordpress-theme-base repository,它是使用Webpack 4构建的。

首先,这与Wordpress redirecting to localhost instead of virtual host when being proxied by Webpack Dev Server有关。我面临着类似的问题,但是唯一的解决方案并没有真正为我做任何事情。

我正在Vagrant开发机器中运行WordPress 4.7,它会像应有的那样响应http://wordpress.local。以前,我曾使用Browsersync来监视文件并触发刷新,并且此过程按预期工作:browser-sync start --proxy 'https://wordpress.local' --files '**/dist/js/*.js, **/*.css, **/*.php'

但是,使用webpack-dev-server无法复制行为。这就是应该发生的情况。

  • 服务器以https://localhost:9000开头
  • 导航到https://localhost:9000应该显示与导航到https://wordpress.local相同的页面,而无需任何重定向。网站按https://wordpress.local的方式工作,但URL为https://localhost:9000
  • 发生更改,页面被重新加载。

  • 相反,这发生了。
  • 导航到https://localhost:9000会将我重定向到301的https://wordpress.local。我已禁用了remove_filter('template_redirect', 'redirect_canonical');的规范重定向,但无济于事。
  • 导航到https://localhost:9000/404将显示由我的主题提供的404页面。没有重定向发生。
  • 导航到https://localhost:9000/existing-page/会将我重定向到带有301的https://localhost/existing-page/

  • 到底是怎么回事?我将问题范围缩小到WordPress,因为代理非WordPress目录可以按预期工作:

    直接,$ _ SERVER的内容:https://gist.github.com/k1sul1/0aff7ba905464ca7852f2ce00b459922

    代理,$ _SERVER的内容:https://gist.github.com/k1sul1/f090aa103dc3a3cb0b339269560ac19d

    我试过玩 header 之类的东西,但是没有运气。这是我的webpack.config.js的样子:
    const path = require('path');
    const url = 'https://wordpress.local/';
    const themeDir = '/wp-content/themes/themename/';
    
    module.exports = {
      entry: './src/js/index.js',
      output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist'),
        publicPath: url
      },
      devServer: {
        historyApiFallback: true,
        compress: true,
        port: 9000,
        https: url.indexOf('https') > -1 ? true : false,
        publicPath: themeDir,
        proxy: {
          '*': {
            'target': url,
            'secure': false
          },
          // '/': { // This doesn't do much.
            // target: url,
            // secure: false
          // }
        },
      }
    };
    

    TL;博士:如何在不使WordPress疯狂的情况下使用webpack-dev-server复制Browsersync行为?

    最佳答案

    我最终确实解决了这个问题。进入代理配置的魔术线是changeOrigin: trueautoRewrite: true。这些选项进入http-proxy-middleware

    无需对WordPress域或配置进行任何更改。

    const path = require('path');
    const pjson = require(path.join(__dirname, '..', 'package.json'));
    
    const isWin = /^win/.test(process.platform);
    const isMac = /^darwin/.test(process.platform);
    const isHTTPS = pjson.wptheme.proxyURL.includes('https');
    
    exports.devServer = ({ host, port } = {}) => {
      const options = {
        host: host || process.env.HOST || 'localhost',
        port: port || process.env.PORT || 8080,
      };
      options.publicPath = (isHTTPS ? 'https' : 'http') + '://' + options.host + ':' + options.port + pjson.wptheme.publicPath;
    
      return {
        devServer: {
          watchOptions: {
            poll: isWin || isMac ? undefined : 1000,
            aggregateTimeout: 300,
          },
    
          https: isHTTPS,
          stats: 'errors-only',
          host: options.host,
          port: options.port,
          overlay: {
            errors: true,
            warnings: false,
          },
    
          open: true,
          hotOnly: true,
    
          proxy: {
            '/': {
              target: pjson.wptheme.proxyURL,
              secure: false,
              changeOrigin: true,
              autoRewrite: true,
              headers: {
                'X-ProxiedBy-Webpack': true,
              },
            },
          },
    
          publicPath: options.publicPath,
        },
      };
    };
    

    从package.json引用的值如下所示:
    "wptheme": {
      "publicPath": "/wp-content/themes/themefolder/dist/",
      "proxyURL": "https://wordpress.local"
    },
    

    关于通过webpack-dev-server代理访问时,WordPress重定向到siteurl,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43387450/

    10-16 19:52