通过 webpack-dev-server 代理访问时 WordPress 重定向到 siteurl

2023-12-27

这个问题有历史价值,所以我稍微更新一下。这是 Google 中“webpack-dev-server wordpress redirect”的最高结果。虽然已接受的解决方案适用于 Webpack 2,但它可能不再适用。如果没有的话可以参考我的WordPress 主题库 https://github.com/k1sul1/wordpress-theme-base,它是使用 Webpack 4 构建的。


首先,这与当 Webpack Dev Server 代理时,Wordpress 重定向到本地主机而不是虚拟主机 https://stackoverflow.com/questions/35432990/wordpress-redirecting-to-localhost-instead-of-virtual-host-when-being-proxied-by。我面临着类似的问题,但唯一的解决方案并没有真正为我做任何事情。

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

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

  1. 服务器启动于https://localhost:9000
  2. 导航至https://localhost:9000应该向我展示与导航到相同的页面https://wordpress.local,没有任何重定向。网站按原样运行https://wordpress.local,但网址是https://localhost:9000.
  3. 发生变化,页面重新加载。

相反,这种情况发生了。

  • 导航至https://localhost:9000 重定向 me to https://wordpress.local使用 301。我已禁用规范重定向remove_filter('template_redirect', 'redirect_canonical');但没有帮助。
  • 导航至https://localhost:9000/404向我展示一个由我的主题提供的 404 页面。不会发生重定向。
  • 导航至https://localhost:9000/existing-page/ 重定向 me to https://localhost/existing-page/与301。

到底发生了什么事?我已将问题范围缩小到 WordPress,因为代理非 WordPress 目录按预期工作:

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

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

我尝试过使用标题等,但没有运气。这是我的 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;DR:如何使用 webpack-dev-server 复制 Browsersync 行为而不让 WordPress 发疯?


我最终确实解决了这个问题。进入代理配置的神奇行是changeOrigin: true and autoRewrite: true。这些选项进入http 代理中间件 https://github.com/chimurai/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"
},
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 webpack-dev-server 代理访问时 WordPress 重定向到 siteurl 的相关文章

随机推荐

  • 创建直方图 OCaml

    我的任务是创建一个直方图 输出某个元素在列表中出现的次数 Input 2 2 2 3 4 4 1 Output 2 3 2 2 2 1 3 1 4 2 4 1 1 1 Expected output 2 3 3 1 4 2 1 1 My c
  • YARN 中应用程序管理器和应用程序主控之间的区别?

    我了解 MRv1 的工作原理 现在我试图了解 MRv2 YARN 中的应用程序管理器和应用程序主控之间有什么区别 应用程序主控和应用程序管理器这两个术语通常可以互换使用 实际上 Application Master 是请求 启动和监视应用程
  • 使用 moment.js 将日期转换为字符串“MM/dd/yyyy”

    我需要从 jquery datepicker 中获取日期值 将其转换为字符串格式 MM dd yyyy 以便它可以执行正确的 ajax post 当页面加载或更改日期选择器时 将进行 jquery ajax 调用 我有这个代码 var sT
  • 以编程方式在 WSO2 API Manager 中添加自定义处理程序

    我通过使用 WSO2 API Manager 的自动化流程创建和订阅新的 API出版商 https docs wso2 com display AM190 Publisher APIs and Store https docs wso2 c
  • 识别与给定字符串向量匹配的列索引

    我有一个字符串向量 x lt c a b 我有一个多列矩阵 其中包含该字符串向量中的名称 我想获取与其名称匹配的列号 索引 which colnames sample matrix x 当 x 不是向量而是单个元素时 上面的方法有效 有什么
  • 长整数中单个位的索引(在C中)[重复]

    这个问题在这里已经有答案了 我试图找到一个最佳代码来定位长整数 64 位 中的单个位索引 长整数只有一位设置位 使用C语言 目前 我只是将整个事情移动一位 然后检查零 我读过有关查找表的内容 但它不适用于整个 64 位 我考虑过检查每个 8
  • 将回调方法实现转换为 akka 流源

    我正在与我无法控制的 java 库中的数据发布者合作 发布者库使用典型的回调设置 库代码中的某处 该库是java的 但为了简洁起见 我将在scala中进行描述 type DataType trait DataConsumer def onD
  • 从 AppDelegate 重新加载 tableView

    我有一个非常简单的问题 但我仍在寻找可可的方法 我有一个在 Xcode 中创建的普通 rootViewController 应用程序 在 AppDelegate 中 我有一个更新数据库的函数 当运行时收到推送消息时 didReceiveRe
  • exp init 项目 [11:31:26] zlib:文件意外结束

    当我跑步时exp init Locations它给了我这个错误 npm 6 1 0 exp 55 04 正如 Mandan 所描述的 您还可以导航至 userprofile expo starter app cache文件夹删除blank
  • 如何对占数据 50% 的条形进行着色?

    我正在为一些数据点绘制直方图 其中条形高度是该数据点占整个数据的百分比 x normal size 1000 hist bins np histogram x bins 20 plt bar bins 1 hist astype np fl
  • 从 MS-SQL Server 2008 中的 XML 字段提取值

    我试图从存储在单个 XML 字段中的 MS SQL Server 2008 数据库中提取四条信息 这是我第一次使用 XML 所以我遇到了一些麻烦 这就是为什么我只有要提取的数据 我尝试过使用其他帖子来解决我的问题 但显然没有运气 这四个信息
  • Fiddler 未捕获来自 .Net Core 的流量

    我有一个控制台应用程序 它通过 HTTP HTTPS 调用许多第三方服务 这些服务最初是为在 Net Framework 下运行而编写的 Fiddler 与该版本的应用程序配合良好 捕获所有 HTTP 和 HTTPS 流量 我将应用程序移植
  • Tomcat Jersey Eclipse ClassNotFound org.glassfish.jersey.servlet.ServletContainer

    我正在运行你好世界 http www mkyong com webservices jax rs jersey hello world example 例子 不过我用的是2 7版本 在 maven pom xml 我有
  • 将 symfony 与 postgresql 结合使用

    我正在尝试使用 Symfony 和 PostgreSQL 创建一个网站 我找不到任何说明如何执行此操作的文档 所有文档都假设后端数据库是 mySQL 有人知道该怎么做吗 如果您使用 Doctrine 只需在您的databases yml 中
  • 检测和重定向 SNI 支持的浏览器的最有效代码是什么?

    说吧 我有一个网站mywebsite com 使用 Apache Httpd 托管 现在我想要的是 每当任何用户输入mywebsite com or www mywebsite com如果浏览器支持 SNI 那么它应该重定向到https w
  • 如何检测 32 位 int 的整数溢出?

    我知道这个话题已经被问过好几次了 但是我的问题是关于完整 32 位 int 的溢出 例如 11111111111111111111111111111111 00000000000000000000000000000001 000000000
  • 如何实现仅输入表情符号键盘?

    我想实现自定义条目 Xamarin forms 当用户将焦点放在条目上时 设备将显示表情符号键盘 简短回答 不幸的是 由于 Android 和 iOS 平台的限制 如果不创建自己的键盘是不可能的 长答案 Default behaviour
  • 如何处理实现多个接口的对象的Dtos?

    我们在 WCF 服务接口中使用 Dtos 但当 Dto 表示的业务对象实现多个接口时 我们开始遇到问题 并且我们希望在这些不同的上下文中返回 Dtos 并且还能够处理Dtos 在客户端上是多态的 例如 假设我们有一个接口IBusinessO
  • Android 中的 Proguard 和 Reflection

    我刚刚使用了 proguard 但是我尝试通过反射实例化的类不起作用 我有一个界面 Algorithm 我通过这样的课程 AlgorithmFactory SomeClassThatExtendsAlgorithmImpl class 类是
  • 通过 webpack-dev-server 代理访问时 WordPress 重定向到 siteurl

    这个问题有历史价值 所以我稍微更新一下 这是 Google 中 webpack dev server wordpress redirect 的最高结果 虽然已接受的解决方案适用于 Webpack 2 但它可能不再适用 如果没有的话可以参考我