【问题标题】:$_GET value from HTACCESS url来自 HTACCESS url 的 $_GET 值
【发布时间】:2016-05-02 23:03:38
【问题描述】:

不用说,我对 HTACCESS 一无所知。我正在用 PHP 编写一个推荐系统,并且一切正常,尽管当我使用 HTACCESS 使 URL 变得漂亮时它停止工作。示例:

来自

http://localhost/ref.php?referral=1

http://localhost/ref/1

现在代码可以正常工作了,当我使用 HTACCESS 时它就停止工作了,我记得从某个地方读到过,如果我没记错的话,你不能从通过 HTACCESS 的 URL 中使用 _GET 函数?尽管如此,我已经尝试过这个 HTACCESS 规则,但它似乎不起作用.. 它重定向,根据它在丢弃 cookie 时告诉它做的代码,但当我使用时它实际上并没有丢弃 cookie缩短的网址。

RewriteRule ^ref/([^/]+)(|/)$ /ref.php?referral=$1

脚本的代码,如果它有助于理解问题..

    if (isset($_GET['referral']))
{
    $value = $_GET['referral']; // Let's set the cookie value
    // Drop the cookie, let it expire in an hour. 
    setcookie("HHRefCookie", $value, time()+3600);
    // Redir them to register page
    header("Location: " . WWW . "/register");
}

据我了解,这应该可行吗?不应该。反馈将不胜感激。非常感谢您指导正确的方向!

【问题讨论】:

  • 它只是停止工作”是什么意思?你有错误吗?
  • 没有。它重定向到代码中设置的位置。它没有丢弃 cookie,所以它不能读取变量。
  • “我记得从某个地方读到过,如果我没记错的话,你不能从通过 HTACCESS 的 URL 中使用 _GET 函数?” – 那是错的;当然,您可以在 PHP 中通过 $_GET 访问查询字符串参数——该参数的来源、原始请求或重写的请求都无关紧要。

标签: php .htaccess


【解决方案1】:

您查看服务器返回的状态码了吗?我看不出您提供的重写规则如何匹配您正在使用的 URL 架构(即我希望服务器返回 404)。

试试:

RewriteRule ^/ref/(.*)$ /ref.php?referral=$1 [L]

(如果这是 Apache 2.4,则使用 [END] 而不是 [L])

【讨论】:

  • 没有错误,仍然重定向。提供的规则仍然不起作用,它在某个地方出错了。它仍然没有获取推荐 ID。当我删除重定向 URL 并回显 cookie 时,它​​会丢弃 cookie,但是当我将它重定向到注册页面(它应该能够读取 cookie)时,cookie 不会不存在。
  • “它仍然重定向” - 然后给出您提供的代码,重写规则完全按照它应该的方式工作(但是我不知道当您的原始重写规则错误时它是如何做到的)。在重定向中删除 cookie 是一个非常糟糕的主意 - 我希望根据您使用的浏览器而失败 - 规范未定义行为。
猜你喜欢
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 2016-12-05
  • 1970-01-01
  • 2012-03-27
  • 2020-04-14
相关资源
最近更新 更多