2

我有一个页面要求用户确认他是要继续还是取消,我为此使用了重写规则:

RewriteRule ^click/(.+)$ aclick.php?url=$1 [B]

当 URL 带有问号时,就会出现问题。例如:

http://example.com/click/yahoo.com/mobile/?s=ladygaga

我的目标是将此 URL 重写为:

http://example.com/aclick.php?url=yahoo.com/mobile/%3fs=ladygaga

这样继续按钮将转到:'http://yahoo.com/mobile/?s=ladygaga'

但是,继续按钮只是链接到“http://yahoo.com/mobile/”。

有没有人有解决这个问题的想法?

4

1 回答 1

2

%{QUERY_STRING}如下使用。您必须参考REDIRECT_QUERY_STRING而不是QUERY_STRING.

RewriteRule ^click/(.+) aclick.php?url=$1?%{QUERY_STRING} [B,L]

Bflag 将过度转义字符串。如果访问http://example.com/click/yahoo.com/mobile/?s=ladygaga,查询字符串将是url=yahoo%2ecom%2fmobile%2f?s=ladygaga. (不会造成不良影响。)

如果该 URL 没有查询字符串,则多余的“?” 被添加到查询字符串的末尾。为防止这种情况,请使用RewriteCond

# If URL have any query string, then
RewriteCond %{QUERY_STRING} .
RewriteRule ^click/(.+) aclick.php?url=$1?%{QUERY_STRING} [B,L]
# otherwise,
RewriteRule ^click/(.+) aclick.php?url=$1

你可以简单地写成如下:

RewriteRule ^click/(.+) aclick.php

程序aclick.php可以引用环境变量REQUEST_URIREDIRECT_URLQUERY_STRING

于 2012-12-13T12:13:58.837 回答