首页 文章

Apache重写规则查询字符串

提问于
浏览
0

我正在尝试编写一个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? 会导致重写将TARGET查询字符串的值附加到现有域 .

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

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

1 回答

  • 0

    您可以改用此规则:

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

    重要的是在正则表达式中使用 .+ 能够捕获 TARGET 参数中指定的URL的所有字符 .

    这将重定向:

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

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

相关问题