我有一个像这样的网址:
我正在尝试从URL IP = 169%2E59%2E201%2E137中的查询字符串中删除以下查询变量,同时保持字符串的其余部分不变。该变量是IP地址,每次可以是不同的IP地址,但始终是IP。如果出于安全原因在查询字符串中找到IP地址,我使用的CMS系统之一将会出错。不幸的是,我需要从支付网关发送数据,网关无法关闭从它们发送的IP地址。如果我要捕获发送到我的CMS的数据,那么我需要删除或使用HTACCESS替换查询中的IP。
RewriteEngine On
RewriteCond %{THE_REQUEST} ^GET\ /.*\ HTTP/ [NC]
RewriteCond %{QUERY_STRING} IP= [NC]
RewriteCond %{QUERY_STRING} (.*)(IP=[0-9]{1,3}%252E[0-9]{1,3}%252E[0-9]{1,3}%252E[0-9]{1,3})(.*) [NC]
RewriteRule .* %{REQUEST_URI}?%1%3 [R=301,L]
所以,我开始写这样的东西,但老实说,我吮吸mod_rewrite和正则表达式。
我不在乎它是否设置为IP = 123,或者只是删除了,但它不能格式化为IP。如果你能提供帮助,请告诉我!
答案 0 :(得分:2)
我不确定你的前两个RewriteConds,但这样的事情应该有用......
RewriteCond %{QUERY_STRING} (.*)IP=\d{1,3}%2E\d{1,3}%2E\d{1,3}%2E\d{1,3}&(.*) [NC]
RewriteRule ^(.*)$ /$1?%1%2 [R=302,L]
这确实假设在IP地址之后总会有一个参数,如果不是这样,你可以删除&但你最终会得到双安瓿。如果在IP之前始终存在值,则可以始终将其移至IP之前。无论哪种方式,我都假设您使用的任何服务都是相当标准的。
NB:我总是使用302进行测试,因为一旦浏览器缓存转发,就很难测试更改。一旦工作,将其更改回301。
答案 1 :(得分:0)
编辑:这实际上是错误的,无法使用。我不会改变它,因为Cags的答案已经解决了这个问题,所以请忽略它。
您的问题是 %{REQUEST_URI}
包含GET值。所以你最后所做的只是将除IP之外的所有内容再次添加到最后,但IP仍然存在。此外,您不需要所有这些条件。您应该能够使用一条规则完成所有操作,如下所示:
RewriteEngine on
RewriteRule ^(.*)(IP=[0-9]{1,3}%252E[0-9]{1,3}%252E[0-9]{1,3}%252E[0-9]{1,3})(.*)$ $1$3
让我知道这是否适合你。