【问题标题】:how to generate links in php?如何在php中生成链接?
【发布时间】:2010-10-06 08:22:50
【问题描述】:

这是一个非常基本的问题,但我似乎在 Google 上找不到任何东西,嗯。

无论如何,我不是指创建链接,我说的是生成类似 site.com/1 或how to generate links in php? 的链接,例如,url 后面的数字与相应的帖子一起存储在数据库中。如何使用 php 生成这些?

如果我访问 h**p://site.com/questions/3870639/how-to-generate-links-in-php 我如何告诉服务器查询数据库并检索 3870639 的相应帖子? (没有 htaccess)。

【问题讨论】:

    标签: php url hyperlink


    【解决方案1】:

    仅使用 PHP 是不可能的,它需要一个名为 mod_rewrite 的 Apache 服务器模块(假设您的服务器使用 Apache)。谷歌。

    【讨论】:

    • 嗯,我相信我没有像我希望的那样清楚地表达这个问题,我还是想出了答案,感谢您抽出宝贵的时间。
    【解决方案2】:

    你必须使用.htaccess

    您可以通过将所有请求转发到特定文件来实现此类 URL。这是您的Front Controller,它将分解 URL、提取信息并执行或委派必要的操作。使用前端控制器,您有一个单一入口点到您的网站。

    但您需要设置.htaccess 将所有请求转发到此文件,例如

     RewriteRule ^(.*)$ index.php [QSA,L]
    

    您应该检查实现此模式的各种框架,例如 symfony 或 Zend。

    【讨论】:

    • 其他web服务器也有类似的重写方案,适合不运行Apache的人。
    • 嗯,我相信我没有像我希望的那样清楚地表达这个问题,我还是想出了答案,感谢您抽出宝贵的时间。
    • @luq:那你到底想要什么?
    【解决方案3】:

    如果您转到不存在的目录 3870639,我不确定您将如何告诉服务器导航到页面。我通常会使用 htaccess 重定向到 page.php 或类似内容,并使用 $_SERVER['REQUEST_URI'] 来获取页面 URL,或者将 URL 转换为 htaccess 中的 $_GET 变量,然后您可以 split('/',$ _SERVER['REQUEST_URI']) 获取目录数组。

    $directories = split('/',$_SERVER['REQUEST_URI']);
    print_r($directories);
    

    给予

    array(
       [0] => 'site.com',
       [1] => 'questions',
       [2] => '3870639',
       [3] => 'how-to-generate-links-in-php'
    )
    

    但就像我说的,不知道如何访问该页面。

    【讨论】:

    • 嗯,我相信我没有像我希望的那样清楚地表达这个问题,我还是想出了答案,感谢您抽出宝贵的时间。
    【解决方案4】:

    文本转换。编写一个正则表达式来识别 URL 并将其转换为 <a href="$1">$1</a>

    【讨论】:

    • 嗯,我相信我没有像我希望的那样清楚地表达这个问题,我还是想出了答案,感谢您抽出宝贵的时间。
    【解决方案5】:

    使用 mod_rewrite 将是最好的解决方案,但如果您不能使用它,您仍然可以使用 MultiViews 实现类似的效果。但是,您仍然需要启用它(通常通过 .htaccess 或 Apache conf 完成)。

    MultiViews 用于允许内容协商,因此您可以请求 /images/banner 并且 Apache 根据浏览器的 Accept 标头返回适当的类型(banner.png、banner.svg 等)。您可以使用它来隐藏脚本的扩展名,从而允许您在不更改网址的情况下更改运行网站的技术。

    在你的情况下,你可以使用

    /questions/3870639/how-to-generate-links-in-php

    这将与

    相同

    /questions.php/3870639/how-to-generate-links-in-php

    在 questions.php 中 $_SERVER["PATH_INFO"] 将包含 /3870639/how-to-generate-links-in-php (或者您可以解析 $_SERVER['REQUEST_URI'] 作为 BenWells 提到的)。使用 explode() 或正则表达式来获取 ID。

    【讨论】:

    • 请注意,不使用多视图也可以使用 script.php/etc
    【解决方案6】:

    我认为单独使用 PHP 是不可能的。您必须使用 mod_rewrite(您不想使用)或将默认的 404 错误文件更改为 index.php。然后在index.php中你可以使用explode('/', $_SERVER['REQUEST_URI'])从url中获取id。

    但另一种方法是使用 url(我不确定这是否可行,但我想我在某处看到过) http://site.com/index.php/questions/3870639/how-to-generate-links-in-php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2017-04-16
      • 2018-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多