实现非斜杠结尾URL到斜杠结尾URL的301重定向且不破坏现有.htaccess配置
实现非斜杠结尾URL到带斜杠的301重定向(不破坏现有.htaccess代码)
我来帮你搞定这个问题——要实现website.com/seo这类非斜杠结尾URL到website.com/seo/的301永久重定向,同时保留现有.htaccess代码的功能,核心是把新的重定向规则放在现有规则的最前面,因为Apache的Rewrite规则是从上到下依次匹配执行的,顺序错了可能会导致规则冲突。
先理清你现有代码的作用
你的现有.htaccess代码主要做两件事:
- 把带
.php后缀的URL(比如website.com/seo.php)301重定向到伪静态URL(website.com/seo/) - 把带斜杠的伪静态URL内部重写到对应的
.php文件(前提是文件存在且请求不是目录)
修改后的完整.htaccess代码
你只需要在现有代码最顶部添加几行规则即可,完整代码如下:
RewriteEngine On RewriteBase / # 新增:非斜杠结尾 → 带斜杠结尾的301重定向 RewriteCond %{REQUEST_FILENAME}!-f RewriteCond %{REQUEST_URI}!/$ RewriteRule ^(.*)$ /$1/ [R=301,L] # 原有规则:移除.php后缀并添加斜杠 RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC] RewriteRule ^ %1/ [R=301,L] # 原有规则:伪静态内部重写 RewriteCond %{REQUEST_FILENAME}!-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*?)/?$ $1.php [NC,L]
新规则的详细解释
RewriteCond %{REQUEST_FILENAME}!-f:这条条件用来排除实际存在的文件(比如图片、CSS、JS等静态资源),避免这些文件被错误地添加斜杠重定向RewriteCond %{REQUEST_URI}!/$:匹配所有URL末尾没有斜杠的请求RewriteRule ^(.*)$ /$1/ [R=301,L]:将匹配到的URL添加末尾斜杠后做301永久重定向,L标记表示执行完这条规则后就停止后续规则匹配,避免和原有规则冲突
测试小提示
为了避免浏览器缓存301重定向导致测试不便,你可以先把R=301改成R=302(临时重定向),等测试确认所有URL都能正确跳转后,再改回R=301即可。
内容的提问来源于stack exchange,提问作者user14368691
相关产品推荐
相关产品推荐

