许多人希望使用 WordPress 来驱动其网站的根目录(例如 https://example.com),但不希望所有 WordPress 文件杂乱地堆放在根目录中。WordPress 允许你将它安装到子目录中,同时让网站从根目录提供内容。

注意:本指南涵盖了 Apache (.htaccess)、nginx (server blocks) 和 IIS (web.config) 的配置。

自 版本 3.5 起,Multisite 用户可以使用下面列出的所有功能。如果你运行的 WordPress 版本早于 3.5,请在子目录上安装 Multisite WordPress 之前先进行更新。

给主题/插件开发者的提示:这不会将你的代码与 WordPress 分离。主题和插件仍将驻留在 wp-content 文件夹下。

将根目录安装移动到独立目录

假设你已将 WordPress 安装在 example.com。现在你有两种不同的方法将 WordPress 安装移动到子目录:

  1. 不更改 SITE-URL(仍为 example.com)
  2. 更改 SITE-URL(它将重定向到 example.com/subdirectory)

方法 I(无需 URL 变更)

  1. 在根文件夹安装 WordPress 后,将根文件夹中的所有内容移动到一个子目录中。

Apache (.htaccess)

  1. 在根文件夹中创建一个 .htaccess 文件,并将以下内容放入其中(只需更改 example.com 和 my_subdir):
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/my_subdir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_subdir/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ my_subdir/index.php [L] 
</IfModule>

nginx (server block)

  1. 将此添加到你的 nginx server block 中:
location /my_subdir/ {
    try_files $uri $uri/ /my_subdir/index.php?$args;
}

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

这就完成了 🙂

方法 II(带 URL 变更)

移动过程

(ps:如果你已经在子目录中安装了 WP,某些步骤可能已经自动完成)。

  1. 创建存储核心 WordPress 文件的新位置——在我们的示例中将使用 /wordpress。在 Linux 上,从你的 www 目录使用 mkdir wordpress。你可能需要对创建的 wordpress 目录使用 chown apache:apache。
  2. 转到 常规 屏幕。
  3. 在WordPress 地址 (URL):设置主要 WordPress 核心文件的地址。示例:`https://example.com/wordpress`。
  4. 在站点地址 (URL):设置根目录的 URL。示例:`https://example.com`。
  5. 点击保存更改。不要担心现在出现的错误!继续阅读。
  6. 现在将你的 WordPress 核心文件(从根目录)移动到子目录。
  7. 复制(不是移动!)index.php 和 .htaccess 文件从 WordPress 目录到你的网站根目录(博客地址)。.htaccess 文件是隐藏的,因此你可能需要设置 FTP 客户端以显示隐藏文件。如果你没有使用固定链接,那么你可能没有 .htaccess 文件。如果你在 Windows (IIS) 服务器上运行 WordPress并使用固定链接,你的 WordPress 目录中将有一个 web.config 文件而不是 .htaccess 文件。对于 index.php 文件,说明保持不变,复制(不要移动)index.php 文件到你的根目录。web.config 文件必须与 .htaccess 文件区别对待,因此你必须将 web.config 文件移动(不要复制)到你的根目录。
  8. 在你的文本编辑器中打开根目录的 index.php 文件。
  9. 更改以下内容并保存文件。将写着:require dirname( __FILE__ ) . '/wp-blog-header.php';的行更改为以下内容,使用你的目录名称作为 WordPress 核心文件:require dirname( __FILE__ ) . '/wordpress/wp-blog-header.php';。
  10. 登录新位置。现在可能是 `https://example.com/wordpress/wp-admin/`。
  11. 如果你已设置固定链接,请转到固定链接屏幕并更新你的固定链接结构。如果它具有适当的文件权限,WordPress 将自动更新你的 .htaccess 文件。如果 WordPress 无法写入你的 .htaccess 文件,它将向你显示新的重写规则,你应该手动将其复制到你的 .htaccess 文件中(与主 index.php 文件在同一目录中)。

.htaccess 修改

在某些情况下,有些人喜欢在子目录中安装不同版本(例如 /2010、/2011、/latest 等),并希望该网站(默认情况下)使用最新版本,那么在子目录中安装 WordPress,例如 /my_subdir,并在根文件夹的 .htaccess 文件中添加以下内容(只需根据需要更改文字):

Apache (.htaccess):

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ my_subdir\[L\]

nginx (server block):

location = / {
    return 301 /my_subdir/;
}

location /my_subdir/ {
    try_files $uri $uri/ /my_subdir/index.php?$args;
}

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

现在当用户访问你的根域名 (example.com) 时,它会自动重定向到你指定的子目录。

注意:此代码来自 Site 5 的这篇文章:如何使用 .htaccess 将域名重定向到子文件夹。

移动特定的 WordPress 文件夹

以下链接解释了如何更改 WordPress 内的特定目录:

另见