如何修改WordPress子目录站点URL结构,去除/blog前缀以适配SEO
WordPress子目录安装实现根目录URL结构方案
核心思路
WordPress实际安装在domain.com/blog,通过站点地址配置+服务器重写规则,让前台URL直接显示为domain.com/category-name/post-name,同时不干扰主站(其他平台)的正常运行。
具体操作步骤
1. 调整WordPress后台基础设置
- 登录WP后台,进入设置 → 常规:
- 保留**WordPress地址(URL)**为
domain.com/blog(程序实际存放路径,不可修改,否则会和主站冲突) - 将**站点地址(URL)**修改为
domain.com(前台对外展示的域名)
- 保留**WordPress地址(URL)**为
- 进入设置 → 固定链接,选择「自定义结构」,输入:
/category/%category%/%postname%/(开头的斜杠是关键,确保生成的URL不带/blog前缀)
2. 修改根目录的.htaccess规则
主站根目录的.htaccess需要添加转发规则,把指向分类/文章的请求转交给/blog目录的WordPress处理,同时避免影响主站已有页面:
打开根目录的.htaccess,将以下代码放在主站现有规则的最上方:
RewriteEngine On RewriteBase / # 排除主站已存在的文件和目录,防止冲突 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 转发文章URL(category-name/post-name)到/blog目录 RewriteRule ^([^/]+)/([^/]+)/?$ /blog/$1/$2/ [L] # 转发分类归档页面URL(category-name)到/blog目录 RewriteRule ^([^/]+)/?$ /blog/$1/ [L]
3. 确认WordPress目录的.htaccess配置
打开/blog目录下的.htaccess,确保其规则的RewriteBase指向正确路径:
RewriteEngine On RewriteBase /blog/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /blog/index.php [L]
4. 验证与缓存清理
- 访问任意已发布文章,检查URL是否为
domain.com/category-name/post-name且页面正常加载 - 清理WordPress缓存(若使用缓存插件)和浏览器缓存,避免旧URL缓存干扰
- 测试主站所有核心页面,确认重写规则未影响主站功能
关键注意事项
- 若服务器是Nginx而非Apache,需要将上述.htaccess规则转换为Nginx的rewrite规则,比如在主站配置文件中添加:
location / { try_files $uri $uri/ @wordpress; } location @wordpress { rewrite ^/([^/]+)/([^/]+)/?$ /blog/$1/$2/ last; rewrite ^/([^/]+)/?$ /blog/$1/ last; } - 如果存在自定义分类、自定义文章类型或多层级分类,需要调整重写规则以适配更多URL结构
- 确保服务器已开启URL重写功能(Apache的mod_rewrite模块、Nginx的rewrite模块)
内容的提问来源于stack exchange,提问作者Gopal Sharma
相关产品推荐
相关产品推荐

