将Wordpress站点URL从子域更改为子目录

时间:2017-01-05 05:04:37

标签: wordpress url subdomain subdirectory

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

我知道我应该在GoDaddy上将WP安装在正确的根目录上,但是我并不认为这很难修复。

我很清楚我希望example.myrooturl.com成为myrooturl.com/example。如果可能的话,我需要最直接,最快捷的方式来实现这一目标

5 个答案:

答案 0 :(得分:1)

使用此代码重写您的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]

就是这样。

  

使用子目录创建新站点

答案 1 :(得分:0)

我不得不经常反复提出你的要求。移动Wordpress网站可能很棘手,因为网站的规范URL存储在数据库中,而且许多内部链接也存储了完整的URL(而不是相对的URL)。根据我的经验,这可以在5分钟内完成,只需几步,但要做好几分钟的停机准备:

  1. 执行数据库的导出(备份)并将其下载到本地计算机(使用sql格式备份),使用PHPMyAdmin可能最简单
  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查询
  12. 如果遵循这些步骤并且没有遇到任何问题,那么您应该做的就是这样!您应该能够导航到新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,访问Settings-> Permalinks页面,然后单击“save”以在新安装的上下文中重新生成.htaccess。 / p>

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

如果要在SQL转储上进行适当的查找和替换,则必须更新序列化数据中的URL字符串长度属性

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

不过,您可以通过Shell脚本并使用 Perl正则表达式来完成相同的操作。

这是一个查找替换例程,在许多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($2).":\\\"$2\\\""}ge' $MODIFIED_SQL_DUMP_FILE

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

注意:在shell脚本中写入数据库密码并不安全,但是由于无论如何您都在wp-config.php文件中进行密码输入,因此该密码已经公开给具有非您权限的任何人,公开文件。

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

# Restore or populate new database

mysql --protocol=TCP --port=my-port-number --host=$DBHOST --user=$DBUSER --password=$DBPASS mydatabasename < \
$MODIFIED_SQL_DUMP_FILE