【发布时间】:2014-07-23 13:08:40
【问题描述】:
我正在尝试使用 mod_rewrite 重写一个 URL,并在我的 URL 中对括号之间的子字符串进行编码。我的网址:
http://localhost/something?var_a=A&var_b=(B&2/3&)&var_c=C
还有我的 .htaccess:
RewriteEngine On
RewriteCond %{QUERY_STRING} (.+)\((.*?)\)(.+)
RewriteRule ^.*$ somedir/%1%2%3? [R,B]
所以我捕获了三个字符串,括号之前的任何内容,括号内的任何内容以及之后的任何内容。
结果是:
somedir/var_a%3dA%26var_b%3dB%262%2f3%26%26var_c%3dC
但我只想对初始 URL 括号内的文本进行编码,这样
somedir/var_a=A&var_b=dB%262%2f3%26&var_c=C
问题似乎是[B] 选项解码了整个字符串。有没有办法选择性地做到这一点?另外,我的解决方案只能捕获一次括号的出现,如果有这个更通用的就好了;有人可以给我一个提示吗?
请注意,这个问题与我的 previous one 有关,我试图在其中捕获括号之间的文本。
【问题讨论】:
-
你在使用 php 吗?
-
不,我正在使用 mod_perl
-
我有一个解决方案给你,但我对 perl 不熟悉。解决方案是仅将一个参数传递给您的应用程序,即
somedir/...之后的字符串,然后您可以从字符串中提取所需的所有数据 -
使用 apache 请求对象?我可以从中访问整个字符串并对其进行解码,但我不知道如何告诉请求对象然后从解码的字符串中提取参数...
标签: apache .htaccess mod-rewrite url-rewriting urlencode