如何设置.htaccess使用prettylinks并通过参数传递URL

时间:2011-11-25 13:17:39

标签: php .htaccess url

我的问题与此问题非常相似,但出于某种原因,.htaccess解决方案对我不起作用: htaccess url as parameter

我想将一个非编码的URL作为URL变量传递给PHP脚本。如果我这样做,它可以工作:

http://mydomain.com/url.php?url=http://google.com

但如果我尝试在.htaccess的帮助下使用prettylinks,那就不行了,例如:

http://mydomain.com/url/http://google.com

我的.htaccess代码:

RewriteRule ^url/(.*)$ url.php?url=$1 [B,QSA]

我正在使用$ _GET ['url']来捕获PHP中的变量并回显它。正如您从页面输出中看到的那样,它是超级接近的。问题似乎是URL中的第二个斜杠没有通过:

Input URL = http:/google.com

有什么想法吗?

修改

sorta 通过编写这个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变量本身添加任何变量,它们会在$ _GET数组的单独索引中传递:

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

结果:

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

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

结果:

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

2 个答案:

答案 0 :(得分:0)

请勿在GET中使用http:前缀和:,并且通常在网址中使用$_GET['url']。这就是导致错误的原因。服务器停止在那里读取http:,因为它检测到另一个http请求。只是不要使用:或其中包含file:的任何内容(就像{{1}}一样)。

答案 1 :(得分:0)

您可能需要htmlspecialchars()您传递的网址。