Php 如何将.htaccess设置为使用prettylinks并将URL作为参数传递

Php 如何将.htaccess设置为使用prettylinks并将URL作为参数传递,php,.htaccess,url,Php,.htaccess,Url,我的问题与此非常相似,但出于某种原因,.htaccess解决方案不适合我: 我想将一个未编码的URL作为URL变量传递给PHP脚本。如果我这样做,它会起作用: 但如果我在.htaccess的帮助下尝试使用prettylinks,则不会,例如: My.htaccess代码: RewriteRule ^url/(.*)$ url.php?url=$1 [B,QSA] 我正在使用$_GET['url']捕获PHP中的变量并对其进行回显。从页面输出可以看出,它非常接近。问题似乎是URL中的第二个

我的问题与此非常相似,但出于某种原因,.htaccess解决方案不适合我:

我想将一个未编码的URL作为URL变量传递给PHP脚本。如果我这样做,它会起作用:

但如果我在.htaccess的帮助下尝试使用prettylinks,则不会,例如:

My.htaccess代码:

RewriteRule ^url/(.*)$ url.php?url=$1 [B,QSA]
我正在使用$_GET['url']捕获PHP中的变量并对其进行回显。从页面输出可以看出,它非常接近。问题似乎是URL中的第二个斜杠无法通过:

Input URL = http:/google.com
有什么想法吗

编辑

我通过编写以下PHP解决了这个问题:

// Input vars
$url = $_GET['url'];

// Reformat URL because htaccess fvcks it up
if (substr($url,0,6) == "http:/" && substr($url,6,1) != "/")
$url = str_replace("http:/","http://",$url);
但我没有注意到,如果我向URL变量本身添加任何变量,它们将在$\u get数组中的单独索引中传递:

http://mydomain.com/url/http://google.com/?a=123
结果:

$_GET = Array ( [url] => http:/google.com/ [a] => 123 )
$_GET = Array ( [url] => http://google.com/?a=123 )

结果:

$_GET = Array ( [url] => http:/google.com/ [a] => 123 )
$_GET = Array ( [url] => http://google.com/?a=123 )

不要在GET和URL中使用
http:
前缀和
。这就是导致错误的原因。服务器停止读取
$\u GET['url']
,因为它检测到另一个http请求。只是不要使用
http:
或任何其他包含
的东西(就像
文件:
)。

您可能需要使用htmlspecialchars()您正在传递的URL。

我理解您的意思,但我需要它能够像这样工作:)我在其他网站上看到过它的工作方式,所以我知道一定有办法。@Kane是的。。。使用.htaccess和PHP,您无法做到这一点。只需删除http:part并稍后添加即可。使用正常的GET,服务器知道他期望的是什么:一个字符串!有了重写规则,你就不能!时期如果你想听我说,很好。否则就不要问你不想要答案的问题。好的,你能解释一下为什么正确的答案在这里被接受吗@凯恩,这是我最后一次告诉你,然后你想怎么做就怎么做。使用URL中包含
的任何内容都是非常不鼓励的(当我的意思是非常严肃的时候,我是认真的)。无论是否重写。这是可能的,但你不应该这样做。只需将
google.com
作为参数传递,并在PHP脚本中执行:
$\u GET['url']='http:'$_获取['url']。现在,
$\u GET['url']
是“http:google.com”。魔术伙计,不知道你为什么这么生气。我希望它以这种方式工作的原因是为了可用性,这样任何访问该站点的人都可以简单地将其URL粘贴到地址栏中,并且它将在iframe中加载顶部的共享按钮以及他们的站点。大多数人会因为不得不从一开始就删除http://而感到困惑。现在明白了吗?因此,如果确实可能的话,请告诉我解决办法,而不是屈尊俯就。