//
将旧的URL重定向为只有一个/
发件人:
https://www.example.com/maincategory//subcategory/
收件人:
https://www.example.com/maincategory/subcategory/
此解决方案的重定向过多:
Redirect 301 /maincategory//subcategory/ /maincategory/subcategory/
.htaccess
文件的顶部尝试以下操作:RewriteEngine on
RewriteCond %{THE_REQUEST} "^GET /maincategory//subcategory/"
RewriteRule (.*) /$1 [R=302,L]
这使用的特征是RewriteRule
pattern匹配的URL路径已经减少了多个斜线。然后,我们使用
$1
后向引用将其重定向回到相同的URL路径。通过检查请求的实际URL是否包含双斜杠(存储在THE_REQUEST
服务器变量中),可以防止重定向循环。THE_REQUEST
服务器变量包含HTTP请求标头的第一行。而且,重要的是,它不是processed
。请注意,我省略了字符串结尾锚($
),因此上述内容将匹配/maincategory//subcategory/<anything>
并相应地重定向。如果您只想只匹配/maincategory//subcategory/
,则在CondPattern
的末尾添加一个space(尽管space +“ HTTP”更易于阅读)。例如:RewriteCond %{THE_REQUEST} "^GET /maincategory//subcategory/ HTTP"
在测试之前清除浏览器缓存。使用302(临时)重定向进行测试,以避免出现缓存问题。此解决方案的重定向过多:
Redirect 301 /maincategory//subcategory/ /maincategory/subcategory/
似乎Apache会在所请求的URL路径和提供给Redirect
指令的URL路径匹配之前在both]中减少多个斜杠,因此您将导致重定向循环。