【问题标题】:url encoded redirect in htaccesshtaccess中的url编码重定向
【发布时间】:2014-11-20 01:30:33
【问题描述】:

我想做一个简单的 htaccess 重定向。如果可以的话,希望避免使用 PHP。

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

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

我的 htaccess 文件:

RewriteEngine on

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

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

【问题讨论】:

  • 这里给出了答案,但我认为它不适用于现代版本的 Apache - stackoverflow.com/questions/18990593/… ${unesc:$1} 是在服务器配置中启用的 RewriteMap。
  • 您是否确定 apache 没有捕获请求(mod_security 之类的?),因为它有一个编码的 URL?如果是这样的话,请求甚至永远不会到达 mod_rewrite。

标签: apache .htaccess redirect


【解决方案1】:

嗯,这很棘手,因为它还需要更改 Apache 配置以让您使用编码斜杠,例如网址中的%2F

首先在 Apache config 中添加这一行:

AllowEncodedSlashes On

然后重启 Apache。

然后在你的根 .htaccess 中有这个规则让 Apache 解码和重定向:

RewriteEngine On

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

【讨论】:

  • 用基本的 URI 测试过,这行得通!谢谢!很快将测试更复杂的 URI。
【解决方案2】:

您是否尝试过使用 HTTP 重定向?在 HTTP 响应状态代码中,301 Moved Permanently 用于永久 URL 重定向。你可以改用Redirect 301 / http://stackoverflow.com 之类的东西。

【讨论】:

  • 他想从请求的 uri 中使用重定向 URL,而不是硬编码。
猜你喜欢
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 2018-03-18
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多