1

我的 apache 遇到了这个问题并重写了规则。

我的原始网址是这样的:

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]

工作,但有一个问题。当用户在来自 facebook 的 URL 中单击时,使用%3D而不是=,我的 apache 将其更改为 a %25,就像这样

www.urbana.com.uy/xcore/?m=nw&nw=MTQ2NA%253D%253D

这不起作用

如何告诉我的 apache 不要将%符号更改为%25并重定向所有非 www no www?

谢谢

4

1 回答 1

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 安全字符,即使您可以使重写工作,将其发送到参数中也会导致问题。

于 2013-08-15T16:16:14.283 回答