将 Wordpress 站点 URL 从子域更改为子目录
Changing Wordpress Site URL from Subdomain to Sub Directory
这是 911;我需要将我创建 GoDaddy WP 安装的 Wordpress 子域 URL 更改为子目录 URL。我不能在我的 FTP 根站点文件夹中创建一个文件夹并将 WP 文件传输过来吗?没有迁移插件工作。
我知道一开始我应该在 GoDaddy 上的正确根目录下安装 WP,但我不认为修复起来如此困难。
所以我很清楚我想要 example.myrooturl.com to be myrooturl.com/example。如果可能的话,我需要最直接、最快的方法
我不得不经常执行与您要求的相反的操作。移动 Wordpress 网站可能会很棘手,因为该网站的规范 URL 存储在数据库中,许多内部链接也与完整的 URL(不是相对的)一起存储。根据我的经验,只需几个步骤即可在 5 分钟内完成此操作,但请做好停机几分钟的准备:
- 执行数据库的导出(备份)并将其下载到本地计算机(使用 sql 格式备份)可能最简单使用 PHPMyAdmin
- 在好的文本编辑器中打开 sql 文件(Notepad++ 适用于 Windows 或 Text-Wrangler 适用于 Mac)
- 在数据库中执行“查找和替换”,找到您当前的 url“example.myrooturl.com”的所有实例,并将其替换为新的 url“myrooturl.com/example"
- Select 文件中的所有文本并复制到剪贴板(Ctrl+c 或 Cmd+c)
- 使用 FTP 程序连接到 FTP 服务器(恕我直言,FileZilla 最好)
- 在站点的根目录中创建一个名为“example”的子文件夹(其中“example”将是 url 的 /example 部分)
- 导航到站点的根目录 - 可能是根目录中名为“example.myrooturl.com”的文件夹
- Select 该目录下的所有文件
- 将这些文件拖到新创建的“/example”文件夹中
- 返回 PHPMyAdmin 并将步骤 4 中复制的 sql 语句粘贴到查询中 window - 这可能需要几秒到一两分钟的时间,文本才会显示在文本区域中
- 执行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-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$ wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ [L]
RewriteRule . index.php [L]
就是这样。
Create a New Site with Subdirectory
我在完成不同指南中找到的所有步骤后遇到了一些问题。在搜索并将我新更改的 en.domain.com 替换为域后。com/en 我的 en 站点没有显示任何内容。经过一些故障排除后,我发现我还必须在 wp_blogs table 中更改域和路径,在我将域切换到子目录之前,我在任何指南中都没有看到这一点。所以我想如果你像我一样挣扎,我会给出一个提示 ;)
Sub-domain 或 sub-directory 是安装 multi-site WordPress 时的重要部分,当您尝试在 WordPress.If 上设置网络时会发现此选项选择 sub-domain 那么您需要 re-install WordPress,因为这是永久性更改,唯一的解决方案是 re-install 并重新配置 WordPress。我附上了图片,您可以在其中找到它。谢谢! enter image description here
修改包含URLs
的序列化数据字符串
这是添加到@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 长度属性。
(显然"subdomain"、"domain"和"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().":\\"\\""}ge' $MODIFIED_SQL_DUMP_FILE
完成上述操作后,您可以使用新的 SQL 转储文件在使用与您的查找中定义的相同域和子目录结构的测试站点上构建数据库-替换脚本。
注意:在shell脚本中写入你的数据库密码被认为是不安全的,但是因为你在wp-config.php
文件中这样做它已经暴露了任何对您的非 public 文件具有读取权限的人。
在不同的 shell 脚本或同一个脚本中,您可以执行如下操作:
# Restore or populate new database
mysql --protocol=TCP --port=my-port-number --host=$DBHOST --user=$DBUSER --password=$DBPASS mydatabasename < \
$MODIFIED_SQL_DUMP_FILE
这是 911;我需要将我创建 GoDaddy WP 安装的 Wordpress 子域 URL 更改为子目录 URL。我不能在我的 FTP 根站点文件夹中创建一个文件夹并将 WP 文件传输过来吗?没有迁移插件工作。
我知道一开始我应该在 GoDaddy 上的正确根目录下安装 WP,但我不认为修复起来如此困难。
所以我很清楚我想要 example.myrooturl.com to be myrooturl.com/example。如果可能的话,我需要最直接、最快的方法
我不得不经常执行与您要求的相反的操作。移动 Wordpress 网站可能会很棘手,因为该网站的规范 URL 存储在数据库中,许多内部链接也与完整的 URL(不是相对的)一起存储。根据我的经验,只需几个步骤即可在 5 分钟内完成此操作,但请做好停机几分钟的准备:
- 执行数据库的导出(备份)并将其下载到本地计算机(使用 sql 格式备份)可能最简单使用 PHPMyAdmin
- 在好的文本编辑器中打开 sql 文件(Notepad++ 适用于 Windows 或 Text-Wrangler 适用于 Mac)
- 在数据库中执行“查找和替换”,找到您当前的 url“example.myrooturl.com”的所有实例,并将其替换为新的 url“myrooturl.com/example"
- Select 文件中的所有文本并复制到剪贴板(Ctrl+c 或 Cmd+c)
- 使用 FTP 程序连接到 FTP 服务器(恕我直言,FileZilla 最好)
- 在站点的根目录中创建一个名为“example”的子文件夹(其中“example”将是 url 的 /example 部分)
- 导航到站点的根目录 - 可能是根目录中名为“example.myrooturl.com”的文件夹
- Select 该目录下的所有文件
- 将这些文件拖到新创建的“/example”文件夹中
- 返回 PHPMyAdmin 并将步骤 4 中复制的 sql 语句粘贴到查询中 window - 这可能需要几秒到一两分钟的时间,文本才会显示在文本区域中
- 执行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-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$ wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ [L]
RewriteRule . index.php [L]
就是这样。
Create a New Site with Subdirectory
我在完成不同指南中找到的所有步骤后遇到了一些问题。在搜索并将我新更改的 en.domain.com 替换为域后。com/en 我的 en 站点没有显示任何内容。经过一些故障排除后,我发现我还必须在 wp_blogs table 中更改域和路径,在我将域切换到子目录之前,我在任何指南中都没有看到这一点。所以我想如果你像我一样挣扎,我会给出一个提示 ;)
Sub-domain 或 sub-directory 是安装 multi-site WordPress 时的重要部分,当您尝试在 WordPress.If 上设置网络时会发现此选项选择 sub-domain 那么您需要 re-install WordPress,因为这是永久性更改,唯一的解决方案是 re-install 并重新配置 WordPress。我附上了图片,您可以在其中找到它。谢谢! enter image description here
修改包含URLs
的序列化数据字符串这是添加到@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 长度属性。
(显然"subdomain"、"domain"和"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().":\\"\\""}ge' $MODIFIED_SQL_DUMP_FILE
完成上述操作后,您可以使用新的 SQL 转储文件在使用与您的查找中定义的相同域和子目录结构的测试站点上构建数据库-替换脚本。
注意:在shell脚本中写入你的数据库密码被认为是不安全的,但是因为你在wp-config.php
文件中这样做它已经暴露了任何对您的非 public 文件具有读取权限的人。
在不同的 shell 脚本或同一个脚本中,您可以执行如下操作:
# Restore or populate new database
mysql --protocol=TCP --port=my-port-number --host=$DBHOST --user=$DBUSER --password=$DBPASS mydatabasename < \
$MODIFIED_SQL_DUMP_FILE