许多人希望使用 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 安装移动到子目录:
- 不更改 SITE-URL(仍为
example.com) - 更改 SITE-URL(它将重定向到
example.com/subdirectory)
方法 I(无需 URL 变更)
- 在根文件夹安装 WordPress 后,将根文件夹中的所有内容移动到一个子目录中。
Apache (.htaccess)
- 在根文件夹中创建一个
.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)
- 将此添加到你的 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,某些步骤可能已经自动完成)。
- 创建存储核心 WordPress 文件的新位置——在我们的示例中将使用
/wordpress。在 Linux 上,从你的www目录使用mkdir wordpress。你可能需要对创建的wordpress目录使用chown apache:apache。 - 转到 常规 屏幕。
- 在WordPress 地址 (URL):设置主要 WordPress 核心文件的地址。示例:`https://example.com/wordpress`。
- 在站点地址 (URL):设置根目录的 URL。示例:`https://example.com`。
- 点击保存更改。不要担心现在出现的错误!继续阅读。
- 现在将你的 WordPress 核心文件(从根目录)移动到子目录。
- 复制(不是移动!)
index.php和.htaccess文件从 WordPress 目录到你的网站根目录(博客地址)。.htaccess文件是隐藏的,因此你可能需要设置 FTP 客户端以显示隐藏文件。如果你没有使用固定链接,那么你可能没有 .htaccess文件。如果你在 Windows (IIS) 服务器上运行 WordPress并使用固定链接,你的 WordPress 目录中将有一个web.config文件而不是.htaccess文件。对于index.php文件,说明保持不变,复制(不要移动)index.php 文件到你的根目录。web.config文件必须与.htaccess文件区别对待,因此你必须将web.config文件移动(不要复制)到你的根目录。 - 在你的文本编辑器中打开根目录的
index.php文件。 - 更改以下内容并保存文件。将写着:
require dirname( __FILE__ ) . '/wp-blog-header.php';的行更改为以下内容,使用你的目录名称作为 WordPress 核心文件:require dirname( __FILE__ ) . '/wordpress/wp-blog-header.php';。 - 登录新位置。现在可能是 `https://example.com/wordpress/wp-admin/`。
- 如果你已设置固定链接,请转到固定链接屏幕并更新你的固定链接结构。如果它具有适当的文件权限,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 内的特定目录: