【问题标题】:referring url in php在 php 中引用 url
【发布时间】:2010-09-21 21:11:30
【问题描述】:

我正在尝试设置我的 404 页面来检测引用 URL。 我想在PHP中对此有何想法? 非常感谢

【问题讨论】:

    标签: php


    【解决方案1】:

    .htaccess

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ /index.php/$1 [L]
    </IfModule>
    <IfModule !mod_rewrite.c>
        ErrorDocument 404 /index.php
    </IfModule>
    

    现在,您的所有请求都将被重定向到 index.php 请求的 uri 段将以$_SERVER['REQUEST_URI'] 的形式提供。 因此,只需使用它并在您的数据库中查找该字符串,然后做任何您需要做的事情。


    示例: 我在 localhost 环境中设置了一个测试文件夹,添加了 .htaccess 并创建了一个新的 index.php

    <?php
    $uri = $_SERVER['REQUEST_URI'];
    $segments = explode('/', $uri);
    var_dump($segments['2']);
    

    将您的浏览器发送至:http://localhost/test/123/foo,它将打印出来

    string '123' (length=3)
    

    现在您的字符串在 $segments['2'] 中。在您的数据库查询中使用它。 就这么简单。

    【讨论】:

    • 呃,如果你把它放在子文件夹 test 中,你当然也应该在 .htaccess 中更改它。只是说..
    • 非常感谢您提供的详细示例。在这种情况下,只是一个关于正则表达式的快速问题。到目前为止我所拥有的是一般的,我如何将以下内容变为: RewriteRule ^entry/([^/\.]+)/?$ entry/?id=$1 [L] 到只需要整数的东西。该文件夹中应该有其他文件,但我希望 mod_rewrite 仅适用于整数整数。谢谢
    • 这两个重写条件的意思是,只有当同名的文件和目录都不存在时才执行重写规则。因此,例如调用 /add.php 将正常调用它。简而言之:每当你调用任何不存在的东西时,它都会被发送到 index.php。我建议检查数据库中是否存在该值的条目,以及它是否没有重定向到某些 404 页面。我还强烈建议在将其放入查询之前通过 mysql_real_escape_string() 运行该值。
    【解决方案2】:

    罢工>

    <?php
    $referer = $_SERVER['HTTP_REFERER'];
    ?>
    

    注意:不要过分依赖这些数据,因为很容易被伪造。

    在您的 apache2.conf(或 .htaccess)中

    ErrorDocument 404 /your_error_dir/your_error_file.php

    更新:

    http://ex.am/c8N4j

    您的mod_rewrite 应该检测到给定的参数:c8N4j 您的 PHP 脚本应该在您的数据库中搜索给定的参数,如果找到它应该将用户重定向到实际页面。

    【讨论】:

    • 我认为问题是如何设置 Apache 以便 php 代码可以在他的 404 页面中执行(默认情况下只是一个静态 404.htm 页面)。
    • 对不起,我应该提供更多细节。我想设置一个网址缩短系统。我将通过创建可以在我的 404 页面中检测到的快捷方式来做到这一点(我假设它可以像服务器上的任何其他页面一样运行 php)。所以我需要的是引用 url,这样我就可以破译它以重定向到正确的 URL,因此链接应该看起来像 index/123456 ...因为这样的链接不存在,用户将被重新路由到应该读取该链接的 404 页面并翻译到相应的页面。我可能会完全走错路,但到目前为止这是我的想法。谢谢
    • 对不起,我不明白你的逻辑。您的快捷方式(理想情况下)与 404 无关。
    【解决方案3】:

    你的意思是?

    $_SERVER['HTTP_REFERER']
    

    页面的地址(如果有) 将用户代理引用到当前 页。这是由用户代理设置的。 不是所有的用户代理都会设置这个,并且 有些提供修改的能力 HTTP_REFERER 作为一个特性。简而言之, 它不能真正被信任。它不能真正被信任。

    看看Determining Referer in PHP

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-31
      • 2014-03-17
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      • 2012-06-02
      相关资源
      最近更新 更多