htaccess重定向不起作用:重定向太多[关闭]

问题描述 投票:1回答:1
我们如何使用//将旧的URL重定向为只有一个/

发件人:

https://www.example.com/maincategory//subcategory/

收件人:

https://www.example.com/maincategory/subcategory/

此解决方案的重定向过多:

Redirect 301 /maincategory//subcategory/ /maincategory/subcategory/

.htaccess http-status-code-301
1个回答
1
投票
您可以使用mod_rewrite执行此操作。在根.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]中减少多个斜杠,因此您将导致重定向循环。

© www.soinside.com 2019 - 2024. All rights reserved.