无法移除子目录中WordPress基础URL的尾部斜杠
解决WordPress博客根URL尾部斜杠无法移除的问题
问题分析
你遇到的www.example.com/blog被301重定向到www.example.com/blog/的问题,核心原因有两个:
- Apache服务器的
mod_dir模块默认会对目录请求自动添加尾部斜杠并触发301跳转,这个行为优先级高于WordPress的Rewrite规则 - WordPress内部的URL生成逻辑仍可能输出带斜杠的根地址
具体解决方案
1. 禁用Apache自动添加目录斜杠
在.htaccess文件的最顶部(All In One WP Security规则之前)添加以下规则,阻止Apache自动跳转:
<IfModule mod_dir.c> DirectorySlash Off </IfModule>
2. 调整WordPress的Rewrite规则
修改.htaccess中# BEGIN WordPress区块内的规则,适配无斜杠的根地址:
# BEGIN WordPress # Las directivas (líneas) entre «BEGIN WordPress» y «END WordPress» son # generadas dinámicamente y solo deberían ser modificadas mediante filtros de WordPress. # Cualquier cambio en las directivas que hay entre esos marcadores serán sobrescritas. <IfModule mod_rewrite.c> RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase /blog RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !^/blog/$ RewriteRule . /blog/index.php [L] </IfModule> # END WordPress
这里的关键修改:
- 将
RewriteBase从/blog/改为/blog - 添加
RewriteCond %{REQUEST_URI} !^/blog/$避免请求循环
3. 修正WordPress内部URL生成逻辑
在当前主题的functions.php文件末尾添加以下代码,让WordPress生成根URL时自动去掉尾部斜杠:
// 移除首页URL的尾部斜杠 add_filter('home_url', 'remove_home_trailing_slash', 10, 4); function remove_home_trailing_slash($url, $path, $orig_scheme, $blog_id) { if (empty($path)) { return untrailingslashit($url); } return $url; } // 移除站点URL的尾部斜杠 add_filter('site_url', 'remove_site_trailing_slash', 10, 4); function remove_site_trailing_slash($url, $path, $orig_scheme, $blog_id) { if (empty($path)) { return untrailingslashit($url); } return $url; }
4. 刷新固定链接设置
进入WordPress后台「设置-固定链接」页面,直接点击「保存更改」,无需修改任何设置,这会更新WordPress内部的URL缓存。
5. 清除浏览器缓存
由于浏览器已经缓存了之前的301重定向规则,测试时请使用无痕模式访问,或者手动清除浏览器缓存,确保看到最新的结果。
内容的提问来源于stack exchange,提问作者Angel Carracedo
相关产品推荐
相关产品推荐

