【问题标题】:How to set .htaccess to use prettylinks and pass URL through as parameter如何设置 .htaccess 以使用 prettylinks 并将 URL 作为参数传递
【发布时间】:2011-11-25 13:17:38
【问题描述】:

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

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

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

但如果我尝试在 .htaccess 的帮助下使用漂亮链接,例如:

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 )

【问题讨论】:

    标签: php .htaccess url


    【解决方案1】:

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

    【讨论】:

    • 我明白你在说什么,但我需要它能够像这样工作 :) 我已经看到它在其他网站上这样工作,所以我知道一定有办法。
    • @Kane 是的...使用 .htaccess 和 PHP,您无法做到这一点。只需删除 http: 部分并稍后添加。使用普通的 GET,服务器知道他在期待什么:一个字符串!使用重写规则,您将无法做到!时期。如果你想听我的话,很好。否则就不要问你不想回答的问题。
    • 好的,你能解释一下为什么这里接受了正确的答案吗? stackoverflow.com/questions/5513604/htaccess-url-as-parameter
    • @Kane,这是我最后一次告诉你,然后做你喜欢的事。非常不鼓励使用 URL 中包含 : 的任何内容(当我的意思是非常严重时,我是认真的)。无论是否重写。这是可能的,但你不应该这样做。只需将google.com 作为参数传递,然后在您的PHP 脚本中执行:$_GET['url'] = 'http:'. $_GET['url'];。现在$_GET['url'] 是“http:google.com”。魔法!
    • 老兄,不知道你为什么这么生气。我希望它以这种方式工作的原因是为了可用性,以便访问该站点的任何人都可以简单地将其 URL 粘贴到地址栏中,并且它将在 iframe 中加载其站点顶部的共享按钮。大多数人会因为必须从一开始就删除 http:// 而感到困惑。现在得到吗?因此,如果确实有可能,请告诉我解决方案,而不是如此居高临下。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      • 2011-02-09
      • 1970-01-01
      相关资源
      最近更新 更多