Apache htaccess中的url编码重定向

Apache htaccess中的url编码重定向,apache,.htaccess,redirect,Apache,.htaccess,Redirect,我想做一个简单的htaccess重定向。希望尽可能避免使用PHP 我想将用户重定向到将跟踪请求的URL,如下所示: http://myexample.com/redirect/http%3A%2F%2Fstackoverflow.com%2Fquestions%2Fask 我的htaccess文件: RewriteEngine on RewriteRule redirect/(.*) $1 [L,QSA] 然而,我没有得到我想要的结果。是否有办法解码$1的值并重定向到该值?(它应该能够处理带

我想做一个简单的htaccess重定向。希望尽可能避免使用PHP

我想将用户重定向到将跟踪请求的URL,如下所示:

http://myexample.com/redirect/http%3A%2F%2Fstackoverflow.com%2Fquestions%2Fask

我的htaccess文件:

RewriteEngine on

RewriteRule redirect/(.*) $1 [L,QSA]

然而,我没有得到我想要的结果。是否有办法解码
$1
的值并重定向到该值?(它应该能够处理带有查询字符串的潜在长URL)任何帮助都会很棒

您是否尝试使用HTTP重定向?在HTTP响应中,状态代码301永久移动用于永久URL重定向。您可以执行类似于
重定向301/http://stackoverflow.com
取而代之。

嗯,这很棘手,因为它还需要更改Apache配置,以允许您在URL中使用编码斜杠,例如
%2F

首先在Apache配置中添加此行:

AllowEncodedSlashes On
然后重新启动Apache

然后在root.htaccess中设置此规则,以允许Apache解码和重定向:

RewriteEngine On

RewriteCond %{REQUEST_URI} ^/redirect/(http.+)$ [NC]
RewriteRule ^ %1 [L,R,NE]

他想从请求的uri使用重定向URL,而不是硬编码。这里给出了答案,但我认为它不适用于现代版本的Apache-
${unesc:$1}
是服务器配置中启用的重写映射。你确定Apache没有捕获请求(mod_security或其他什么?),因为它有一个编码的URL吗?如果是这样的话,请求将永远不会到达mod_rewrite.Tested与基本URI,这是有效的!谢谢将很快测试更复杂的URI。