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

时间:2010-12-26 14:55:34

标签: apache .htaccess

我想“抓住”进入我服务器的传入网址,其中包含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?

3 个答案:

答案 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)