我有一个页面要求用户确认他是否要继续或取消,我会使用重写规则:
RewriteRule ^click/(.+)$ aclick.php?url=$1 [B]
当URL有问号时,会出现问题。例如:
http://example.com/click/yahoo.com/mobile/?s=ladygaga
我的目标是将此网址重写为:
http://example.com/aclick.php?url=yahoo.com/mobile/%3fs=ladygaga
这样继续按钮将继续:'http://yahoo.com/mobile/?s = ladygaga'
但是,“继续”按钮只链接到“http://yahoo.com/mobile/”。
有没有人有想法解决这个问题?
答案 0 :(得分:2)
使用%{QUERY_STRING}
如下。您必须引用REDIRECT_QUERY_STRING
而不是QUERY_STRING
。
RewriteRule ^click/(.+) aclick.php?url=$1?%{QUERY_STRING} [B,L]
B
标志会过度地转义字符串。如果您访问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_URI
,REDIRECT_URL
,QUERY_STRING
等。