使 WordPress 网站可从 LAN 内部和外部访问

问题描述 投票:0回答:5

我在 LAN 内的 PC 上配置了 WordPress。所以我可以从同一台计算机使用 localhost/WordPress 访问它,或者使用 LAN 上的另一台计算机使用 IP/WordPress 访问它。

我配置了路由器,因此端口 80 被重定向到服务器 IP,但如果从 LAN 外部加载页面,则无法加载 CSS 和 JS,因为路由是 WordPress 配置中的 localhost。如果我将其更改为我的 freedns url,比方说:myamazingurl.mooo.com,它可以从我的 LAN 外部访问,并且它会加载 CSS 和 JS。

现在我无法从内部 LAN 访问我的网站。 有什么解决方法或解决办法吗?

我读过有关 dnsmasq 的内容,但没有成功。

wordpress dns router lan
5个回答
3
投票

主要问题是因为 WordPress 使用数据库中的服务器地址。

WordPress 使用名为

home
siteurl
的选项中的根 URL,因此,如果您尝试在计算机外部访问 WordPress,可能会获得 css 和 javascript 的错误路径。

您需要更改

setting
->
general
下的选项,并在
WordPress Address (URL)
Site address (URL)
中填写您的服务器 IP

如果你想获得正确的路径而不进行重定向,你可以在

wp-config.php

下定义动态根url

将此脚本添加到

define('ABSPATH', dirname(__FILE__) . '/');

下面
/**
 * get home url from absolute path
 * @return string url to main site
 * [email protected]
 */
function get_dynamic_home_url(){
    $base_dir  = ABSPATH; // Absolute path
    $doc_root  = preg_replace("!${_SERVER['SCRIPT_NAME']}$!", '', $_SERVER['SCRIPT_FILENAME']);
    $base_url  = preg_replace("!^${doc_root}!", '', $base_dir);
    $protocol  = empty($_SERVER['HTTPS']) ? 'http' : 'https';
    $port      = $_SERVER['SERVER_PORT'];
    $disp_port = ($protocol == 'http' && $port == 80 || $protocol == 'https' && $port == 443) ? '' : ":$port";
    $domain    = $_SERVER['SERVER_NAME'];
    $home_url  = "${protocol}://${domain}${disp_port}${base_url}";

    return $home_url;
}
$url = get_dynamic_home_url();
define('WP_SITEURL', $url);
define('WP_HOME', $url);

2
投票

查看 相对 URL WordPress 插件。即使该插件是为从本地网络通过 IP 访问页面而设计的,但效果应该保持不变。 (因为主要问题是URL的变化)

相对 URL 将 wp_make_link_relative 函数应用于链接(帖子、类别、页面等),将它们转换为相对 URL。对于开发人员在移动设备上调试本地 WordPress 实例时非常有用。

http://localhost:8080/wp/2012/09/01/hello-world/
将转换为
/wp/2012/09/01/hello-world/

http://localhost:8080/wp/wp-content/themes/twentyeleven/style.css
将转换为
/wp/wp-content/themes/twentyeleven/style.css

激活此插件后,您可以在 iPad 或其他移动设备上使用 http://192.168.0.1:8080/wp/ 访问本地实例,而不会出现样式和导航问题。


0
投票

我发现的一个选项是编辑 /etc/hosts 文件并将 freedns url 重定向到我的本地主机。所以它现在可以工作,但我不知道这是否是正确的方法......


0
投票

在尝试了几乎所有方法来整理 WP 开发人员并不断地更新它之后,我终于找到了上述解决方案。 相对 URL 插件效果很好。感谢 ByteHamster 的提示:)

更新:经过测试,这并不是我想要的。在这里找到了修复:https://wordpress.stackexchange.com/questions/55239/cant-access-wp-site-over-wifi-network

即...

define( 'WP_HOME', 'http://' . $_SERVER['HTTP_HOST'] );

// or

// define( 'WP_HOME', 'http://' . $_SERVER['HTTP_HOST'] . '/path_to_dir' );

define( 'WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST'] );

// or

// define( 'WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST'] . '/path_to_dir' ); //this is the one that fixed my issue.

现在我可以在 LAN 上的所有设备上看到开发站点的全部荣耀。


0
投票
/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
  define( 'ABSPATH', __DIR__ . '/' );
}

/**
 * Function to get the home URL dynamically.
 *
 * @return string URL to the main site.
 */
function get_dynamic_home_url() {
  $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http';
  $host = $_SERVER['HTTP_HOST'];
  $url = $protocol . '://' . $host . '/your-site'; // Add '/your-site' to the URL
  
  return $url;
}


$url = get_dynamic_home_url();
define('WP_SITEURL', $url);
define('WP_HOME', $url);
© www.soinside.com 2019 - 2024. All rights reserved.