【问题标题】:Apache rewrite rule query stringApache重写规则查询字符串
【发布时间】:2016-08-13 00:16:24
【问题描述】:

我正在尝试编写一个重写器,它从格式的 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? 导致重写将目标查询字符串的值附加到现有域。

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

我知道这可能不是最好的方法,我愿意接受建议。

【问题讨论】:

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


【解决方案1】:

您可以改用此规则:

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

【讨论】:

    猜你喜欢
    • 2016-11-01
    • 1970-01-01
    • 2016-12-08
    • 2018-02-08
    • 2015-09-10
    • 2011-04-18
    • 1970-01-01
    • 2013-03-19
    • 2012-03-08
    相关资源
    最近更新 更多