要将URL路径开始处的多个斜杠(或实际上URL路径中的任何位置)减少为一个斜杠(URL路径开始处始终至少有一个斜杠,即使您看不到这是浏览器的地址栏),可以使用如下指令:
# Reduce multiple slashes to single slashes
RewriteCond %{THE_REQUEST} \\s[^?]*//
RewriteRule (.*) /$1 [R=301,L]
这使用了以下事实,即
RewriteRule
<模式已经减少了多个斜杠。前面的条件检查初始请求的URL路径中是否有多个斜杠。
您可以将上述规则放在现有规则之间的第二个位置。并修改删除尾部斜杠的第一条规则,以减少多个斜杠,从而防止在请求同时包含多个斜杠和尾部斜杠时出现不必要的额外重定向。例如:
# Remove trailing slash from non-directory URLs AND reduce multiple slashes
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.+)/$ https://example.com/$1 [R=301,L]
# Reduce multiple slashes to single slashes
RewriteCond %{THE_REQUEST} \\s[^?]*//
RewriteRule (.*) https://example.com/$1 [R=301,L]
# Force HTTPS and remove WWW
RewriteCond %{HTTP_HOST} ^www\\. [OR,NC]
RewriteCond %{https} off
RewriteRule (.*) https://example.com/$1 [R=301,L]
我刚刚整理了
RewriteCond
检查
HTTP_HOST
服务器变量。
^www\\.(.*)$
可以简化为
^www\\.
因为这里没有使用backreference。
您不需要<IfModule>
包装器。
测试前请清除浏览器缓存,最好先使用302(临时)重定向进行测试,以避免潜在的缓存问题。
此外,如果这些规则仅位于的开头,则它们也会起作用。htaccess文件,当我重新保存永久链接时,规则就会消失这些规则当然需要在.htaccess
文件,位于WordPress前端控制器之前。
但是,他们必须在# BEGIN WordPress
部分不在此块内,否则它们将被覆盖,因为WP本身维护此代码块。
如果将它们放在# BEGIN WordPress
注释标记。