我想“抓住”进入我服务器的传入网址,其中包含URL中的额外“%252F”字符(由于某些历史原因),并将它们(301)重定向到没有这些字符的同一网址。例如: 传入网址:www.sample.com/content/%252F/foo 在.htaccess规则之后:www.sample.com/content/foo
我必须能够在url(在同一个地方)中捕获这些字符的几个实例,例如:www.sample.com/content/%252F/%252F/%252F/foo并将它们全部删除。
我应该使用哪种.htaccess RewriteRule?
答案 0 :(得分:0)
AFAIK RewriteRule必须知道传入请求URL的精确格式。因此,不支持具有任意数量的%252F字符串。
您可以做的是拥有一个自定义404页面来解析%252F的请求URL。自定义404页面将遵循以下逻辑:
Search the request URL for %252F
If found, replace it with a / (or nothing, up to you) and return a 301 header
and an appropriate error page.
Else return a 404 header and appropriate error page.
这应该会给你你想要的效果。 不要担心额外的斜线,apache会忽略它们。
答案 1 :(得分:0)
RewriteRule (/.*?)?((/%2F)+)(.*) $1$4 [redirect=301,last]
答案 2 :(得分:0)
这有效
RewriteEngine on
RewriteBase /
RewriteRule ^(.*)/%2F(.*) /$1$2 [R=301,L]
但有一个缺点,它会进行多次重定向(每组%252F为1)