这个问题具有历史价值,因此我稍微更新了一下。在谷歌中,“webpack-dev-server wordpress redirect”的搜索结果排名最高。虽然已接受的解决方案适用于Webpack 2,但可能不再适用。如果不行,您可以参考我的wordpress-theme-base repository,该存储库使用Webpack 4构建。
首先,这与Webpack Dev Server代理时WordPress重定向到本地主机而非虚拟主机有关。我遇到了类似的问题,但唯一的解决方案对我并没有什么作用。
我正在一个Vagrant开发机器上运行WordPress 4.7,并且它像应该一样响应http://wordpress.local。之前我使用Browsersync来监视我的文件并触发刷新,这按预期工作:
然而,使用webpack-dev-server我无法复制这种行为。这是应该发生的事情。
首先,这与Webpack Dev Server代理时WordPress重定向到本地主机而非虚拟主机有关。我遇到了类似的问题,但唯一的解决方案对我并没有什么作用。
我正在一个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
会发生 重定向 到https://wordpress.local
,返回 301 错误。我使用了remove_filter('template_redirect', 'redirect_canonical');
禁用了规范化重定向,但没有帮助。 - 访问
https://localhost:9000/404
呈现了我的主题提供的 404 页面,没有任何重定向。 - 访问
https://localhost:9000/existing-page/
会发生 重定向 到https://localhost/existing-page/
,返回 301 错误。
到底发生了什么?我已经将问题缩小到WordPress,因为代理非WordPress目录可以按预期工作:
直接访问,$_SERVER的内容:https://gist.github.com/k1sul1/0aff7ba905464ca7852f2ce00b459922
代理访问,$_SERVER的内容: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: 如何在不让WordPress出问题的情况下,使用webpack-dev-server复制Browsersync的行为?
if (module.hot) { fixLinks() }
来缓解这个问题,但现在我已经停止使用它,转而直接访问WordPress网站。@Trevor - Christian