我的apache和重写规则存在此问题。
我的orignal网址是这样的:
urbana.com.uy/core.php?m=amp&nw=MTQ2NA==
当我在Facebook发布时,URL更改(facebook就这样做):
urbana.com.uy/xcore/?m=nw&nw=MTQ2NA%3D%3D
因此,Facebook将=
符号转换为%3D
好吧,从这里开始没问题。
但是,我的服务器中有一个重写规则,它重写了一个不以www开头的URL到www.blabla 这是规则:
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}$1 [R=301,L]
工作但有问题。
如果用户在使用%3D
代替=
的网址中使用clic,我的apache会更改为%25
,如此
www.urbana.com.uy/xcore/?m=nw&nw=MTQ2NA%253D%253D
这不起作用
如何告诉我的apache不将%
符号更改为%25
并重定向所有非www无www?
由于
答案 0 :(得分:0)
我认为对您的问题唯一可靠的答案是不将非url安全值作为URL查询的值发送。我建议在你的参数发送到facebook之前使用某种形式的url编码,然后在另一边使用url解码。在PHP中,您将生成以下内容:
<?php
$parameter_value = url_encode('MTQ2NA==');
$facebook_url = "http://urbana.com.uy/core.php?m=amp&nw=" . $parameter_value;
?>
然后在您的服务器上,当您读取该值时,只需执行URL解码
<?php
$parameter_value = url_decode($_GET['nw']);
?>
其他语言也有类似的工具来执行此操作。我意识到它并不是你要求的,但是“=”符号不是一个url安全字符,即使你可以让重写工作,在参数中发送它也会引起问题。