Apache 如何使用.htaccess规则删除百分比编码的斜杠?

Apache 如何使用.htaccess规则删除百分比编码的斜杠?,apache,.htaccess,Apache,.htaccess,我想“捕获”进入我的服务器的传入URL,这些URL中有额外的“%252F”字符(由于某些历史原因),并将它们(301)重定向到没有这些字符的同一URL。例如: 传入url:www.sample.com/content/%252F/foo after.htaccess规则:www.sample.com/content/foo 我必须能够在url中捕获这些字符的多个实例(在同一位置),例如:www.sample.com/content/%252F/%252F/%252F/%252F/foo并将它们全

我想“捕获”进入我的服务器的传入URL,这些URL中有额外的“%252F”字符(由于某些历史原因),并将它们(301)重定向到没有这些字符的同一URL。例如: 传入url:www.sample.com/content/%252F/foo after.htaccess规则:www.sample.com/content/foo

我必须能够在url中捕获这些字符的多个实例(在同一位置),例如:www.sample.com/content/%252F/%252F/%252F/%252F/foo并将它们全部删除


我应该使用哪个.htaccess重写规则?

AFAIK重写规则必须知道传入请求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会忽略它们。

这很有效

RewriteRule (/.*?)?((/%2F)+)(.*) $1$4 [redirect=301,last]
RewriteEngine on
RewriteBase /
RewriteRule ^(.*)/%2F(.*) /$1$2 [R=301,L]

但是有一个缺点,它会执行多个重定向(每组%252F一个)

欢迎使用SO。我冒昧地将“Unicode”改为“百分比编码”——我想这就是你的意思?如果我错了,请随时回滚更改。这可能值得尝试
allowencodedslash On
-