Apache重写规则查询字符串

时间:2016-04-20 11:01:11

标签: apache .htaccess mod-rewrite url-rewriting

我正在尝试编写一个Rewriterule,它从格式为

的URL中获取一个域
https://www.example.com/sample?TARGET=https%3A%2F%2Fwww.example.com%2Fexample%2Fhelp%3Fparam%3D1.

如果存在TARGET参数,我需要将用户重定向到TARGET查询参数中的值。我的重写规则如下:

RewriteCond  %{QUERY_STRING}  TARGET=([-a-zA-Z0-9_+]+)  
RewriteRule ^(.*)$  %1? [R=302,L]

由于两个问题,这不起作用:

    重写规则中的
  1. %1?会导致重写将TARGET查询字符串的值附加到现有域。

  2. %1的值仅包含https而不是https%3A%2F%2Fwww.example.com%2Fexample%2Fhelp%3Fparam%3D1

  3. 我知道这可能不是继续这项工作的最佳方式,我愿意接受建议。

1 个答案:

答案 0 :(得分:0)

您可以改用此规则:

RewriteEngine On

RewriteCond %{QUERY_STRING} ^TARGET=(.+)$ [NC]
RewriteRule ^ %1? [NE,R=302,L]

在正则表达式中使用.+以捕获TARGET参数中指定的网址的所有字符非常重要。

这将重定向:

http://yourdomain.com/?TARGET=https://www.example.com/example/help?param=1

https://www.example.com/example/help?param=1