Apache重写规则百分比符号 - 脸书

时间:2013-06-03 18:56:30

标签: apache rewrite

我的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?

由于

1 个答案:

答案 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安全字符,即使你可以让重写工作,在参数中发送它也会引起问题。