【问题标题】:Changing Wordpress Site URL from Subdomain to Sub Directory将 Wordpress 站点 URL 从子域更改为子目录
【发布时间】:2017-05-19 13:24:30
【问题描述】:

这是一部 911;我需要将创建 GoDaddy WP 安装的 Wordpress 子域 URL 更改为子目录 URL。我不能在我的 FTP 根站点文件夹中创建一个文件夹并传输 WP 文件吗?没有迁移插件工作。

我知道我应该首先将 GoDaddy 上的 WP 安装在正确的根目录中,但我认为修复起来并不困难。

我很清楚我希望example.myrooturl.com 成为myrooturl.com/example。如果可能的话,我需要最直接、最快的方法来做到这一点

【问题讨论】:

  • 请您阅读这篇文章premium.wpmudev.org/blog/… 好吗?我认为这对你有帮助。
  • 我已经读过这个 @purvik7373 我没有 WP Multisite 你需要这个才能让这些说明起作用
  • 我认为这不是一个好主意,创建一个目录,然后使用 301 重定向将特定的 wordpress 网站重定向到该目录。
  • @KatieSak 您是否考虑过将站点移动到域根目录的子目录并更新数据库中的 Wordpress url 引用?告诉我,如果你需要,我会给你一步一步的过程
  • 谢谢丹尼尔,你的意思是从我的原始域下载 WP 文件到我的本地文件,在我的根域文件夹中创建一个文件夹,然后将所有 WP 文件从我的本地文件传输到该目录/文件夹通过我的 FTP 帐户?这行得通吗?在本地下载我的 WP 需要很长时间,但我打算这样做

标签: wordpress url subdomain subdirectory


【解决方案1】:

我不得不做与您经常要求的相反的事情。移动 Wordpress 站点可能会很棘手,因为站点的规范 URL 存储在数据库中,并且许多内部链接也与完整 URL(不是相对链接)一起存储。根据我的经验,这可以通过几个步骤在 5 分钟内完成,但要为几分钟的停机时间做好准备:

  1. 使用 PHPMyAdmin 执行数据库的导出(备份)并将其下载到本地计算机(使用 sql 格式备份)可能最简单
  2. 在一个好的文本编辑器中打开 sql 文件(Notepad++ 在 Windows 上很好,在 Mac 上是 Text-Wrangler)
  3. 在数据库中执行“查找和替换”,找到当前网址“example.myrooturl.com”的所有实例,并将其替换为新网址“myrooturl.com/example”
  4. 选择文件中的所有文本并复制到剪贴板(Ctrl+c 或 Cmd+c)
  5. 使用 FTP 程序连接到 FTP 服务器(恕我直言,FileZilla 最好)
  6. 在站点的根目录中创建一个名为“example”的子文件夹(其中“example”将是 url 的 /example 部分)
  7. 导航到站点的根目录 - 可能是根目录中名为“example.myrooturl.com”的文件夹
  8. 选择该目录中的所有文件
  9. 将这些文件拖到新创建的“/example”文件夹中
  10. 返回 PHPMyAdmin 并将步骤 4 中复制的 sql 语句粘贴到查询窗口中 - 这可能需要几秒钟到一两分钟,文本才会出现在 textarea 中
  11. 执行sql查询

如果遵循了这些步骤并且没有遇到任何问题,那么您需要做的就是这一切!您应该能够导航到新 URL 并查看该站点。

编辑

没有考虑两件事:删除在 CPanel 中映射到我们要使用的子文件夹的子域;并且子文件夹中的站点将嵌套在另一个 Wordpress 安装中。

第一项就直截了当,去掉子域到文件夹的映射,清除浏览器缓存。第二个更具挑战性,涉及编辑 public_html 文件夹(主站点的文件夹)根目录中的 .htaccess。这是因为当您有一个嵌套在另一个安装中的 wordpress 站点时,Wordpress 可能不允许流量进入嵌套站点 (site.com/site),而是会生成 404 (如果永久链接没有子文件夹名称已存在)。这是通过编辑 htaccess 来完成的(取自here

 # BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]

# Include in the next line all folders to exclude
RewriteCond %{REQUEST_URI}  !(folder1|folder2|folder3) [NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress 

还值得从嵌套站点中删除旧的 .htaccess,登录 wp-admin,访问“设置”->“永久链接”页面并单击“保存”以在新安装的上下文中重新生成 .htaccess。

注意 @user7357089 建议执行 301 重定向,这是维护您拥有的任何 SEO“果汁”以及防止链接断开的好主意。这可以通过 .htaccess 文件轻松完成 - 如果您在这里有经验,请告诉我是否需要指导

【讨论】:

  • 我用 WP 插件完成了这个简短的查找和替换部分,我没有使用 MAMP 登录我使用 go daddy 现在我被踢出了我的仪​​表板!啊,现在我的网站关闭了
  • 你用的是什么插件?无论您是否使用 GoDaddy / HostGator 等,此解决方案都可以使用(我已经在两者上都这样做了)
  • 我使用 WB Migrate 来查找和替换 url。两个网址现在都已关闭哦,不,我吓坏了。我知道你的方法是更有效的方法
  • 不用着急,我们可以解决这个问题,我想在这里帮助你,但我需要访问 sql 文件。挑战是我不能和你聊天因为我们俩都没有足够的声望点来创建房间!
  • us21.chatzy.com/62396775093278您的用户名是不带破折号的密码
【解决方案2】:

用这段代码重写你的wp-config.php

define('SUBDOMAIN_INSTALL', false);

而不是define('SUBDOMAIN_INSTALL', true);

然后转到:

http://www.website.com/wp-admin/network/setup.php

然后:

将以下内容添加到 /var/www/vhosts/website.com/ 中的 .htaccess 文件中,替换其他 WordPress 规则:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

就是这样。

创建带有子目录的新站点

【讨论】:

    【解决方案3】:

    在完成了我在不同指南中找到的所有步骤后,我遇到了一些麻烦。搜索并将我新更改的 en.domain.com 替换为 domain.com/en 后,我的网站没有显示任何内容。在进行了一些故障排除之后,我发现我必须在 wp_blogs 表中更改域和路径,在我进行域到子目录切换之前,我在任何指南中都没有看到这一点。所以我想如果你像我一样挣扎,我会给出一个提示;)

    【讨论】:

      【解决方案4】:

      子域或子目录是安装多站点 WordPress 时的重要部分,当您尝试在 WordPress 上设置网络时会发现此选项。如果您选择了子域,则需要重新安装 WordPress,因为它是永久性更改,唯一的解决方案是重新安装和配置 WordPress。我附上了图片,你会在哪里找到这个。谢谢! enter image description here

      【讨论】:

        【解决方案5】:

        修改包含 URL 的序列化数据字符串

        这是添加到@Daniel anwser 并警告在 SQL 转储上进行简单查找和替换的危险。数据库中存储了很多序列化数据,URL也存储在序列化数据字符串中,尤其是菜单和图像轮播以及很多插件设置。

        如果您想对 SQL 转储进行正确的查找和替换,则必须更新序列化数据中的 URL 字符串长度属性

        我个人使用 Git pre-commit 和 post-receive 钩子来自动执行这些繁琐且容易出错的任务,并大量使用 perl 正则表达式在钩子内完成此任务。

        但是您可以通过 shell 脚本和使用 Perl regexp 来做同样的事情。

        这是一个查找替换例程,在许多 Wordpress 站点迁移中对我来说效果很好。它使用 Perl 单行代码。请注意,Perl 默认安装在所有或大多数 linux 发行版以及 MacOsX 上。

        您还必须对插件生成的 javascript 文件和 json 清单文件执行查找替换例程,否则您的网站可能会中断。

        建议先使用测试站点进行所有修改,而不是在生产站点上。 Wordpress 网站很容易崩溃,有时即使是经验丰富的开发人员也需要一段时间才能找到罪魁祸首。

        这是一个可以运行的 shell 脚本示例。定义您自己的变量和 shell 路径。它通过 2 次传递进行更智能的查找和替换,并更改序列化数据字符串中的 URL 长度属性。

        (显然“子域”、“域”和“tld”必须与你的相对应。)

        #!/bin/bash -e
        
        # Database info
        
        DBHOST=localhost
        DBUSER=mydbusername
        DBPASS=mypasswd
        DBNAME=mydbname
        
        
        # Location of SQL dumps
        
        SQL_DUMP_FILE=/path-to-your-sql-dump/dump.sql
        MODIFIED_SQL_DUMP_FILE=/path-to-your-modified-sql-dump/dump.sql
        
        # Create original dump file
        
        mysqldump -h $DBHOST -u $DBUSER -p$DBPASS $DBNAME  --skip-extended-insert --skip-dump-date --single-transaction > $SQL_DUMP_FILE
        
        
        
        # First pass: find and replace subdomain to subdir, keep original dump and generate new modified file
        
        
        perl -pe 's/subdomain\.domain\.tld/domain\.tld\/subdirectory/g' < $SQL_DUMP_FILE > $MODIFIED_SQL_DUMP_FILE
        
        
        # Second pass: Edit serialised data by changing string length parameters when URL detected
        
        perl -i -pe 's{s:(\d+):\\"(http(?:s)*://domain.tld.+?)\\"}{"s:".length($2).":\\\"$2\\\""}ge' $MODIFIED_SQL_DUMP_FILE
        

        完成上述操作后,您可以使用新的 SQL 转储文件在测试站点上构建数据库,该测试站点使用与 find-replace 脚本中定义的域和子目录结构相同的域和子目录结构。

        注意:在 shell 脚本中写入数据库密码被认为是不安全的,但由于您无论如何都在 wp-config.php 文件中执行此操作,因此它已经暴露给任何对您的非公共文件具有读取权限的人.

        在不同的 shell 脚本或相同的脚本中,您可以执行以下操作:

        # Restore or populate new database
        
        mysql --protocol=TCP --port=my-port-number --host=$DBHOST --user=$DBUSER --password=$DBPASS mydatabasename < \
        $MODIFIED_SQL_DUMP_FILE
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-06-22
          • 2021-05-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-24
          • 1970-01-01
          相关资源
          最近更新 更多