【问题标题】:parameters as part of url instead of after question mark [duplicate]参数作为url的一部分而不是在问号之后[重复]
【发布时间】:2016-08-28 11:29:22
【问题描述】:

我想知道我们是否可以实现这样的目标: example.com/apps?id='blahblah' 转换为 example.com/apps/id/blahblah 即。参数成为页面本身。我想为每个 id 创建单独的 url,但是是动态的。这在 php 或任何其他解决方法中是否可行。

【问题讨论】:

  • 你要找的是mod_rewrite
  • 不明白为什么人们投了反对票。我是否有必要了解 mod_rewrite。它是基于知识的,而不是基于智商的。

标签: php url web


【解决方案1】:

您需要使用 .htaccess 来实现。

.htaccess 基本上将 url 重写为您的原始位置。因此,要按照您在问题中提出的要求,应该是这样的:

RewriteEngine on
RewriteRule apps/id/(.*?)$ apps?id=$1

【讨论】:

  • 我已经放了相同的内容并尝试使用 localhost/xyz/apps/id/123,但它不会重定向到 localhost/xyz/apps?id=123。你能指出我的错误吗?
  • 它不会重定向,它会重写(在不同的 url 中显示相同的页面)。其次,您正在使用 xyz 子目录。那么你有没有把这个.htaccess放到xyz目录下呢?
  • 是的,我已将它放在 xyz 目录中。所以根据你的说法,如果我们输入 localhost/xyz/apps/id/123,它会重写为 localhost/xyz/apps?id=123 并点击应用程序目录中的 index.php 文件,对吗?但这并没有发生。
  • 它不会命中 index.php,它会转到“应用程序”。如果你想要 index.php 然后使用 index.php?id=$1 (同样在重写之前先在浏览器中打开原始 url 以验证它是否正常工作。在这种情况下localhost/xyz/apps?id=123
【解决方案2】:

您可能会被否决,因为“mod rewrite in php”已在教程和文章中得到广泛记录。尝试在此处或在 Google 上搜索它,您会找到很多结果。

无论如何,如果您不能或不会使用 Apache 的mod_rewrite,您可以在纯 PHP 中通过解析 HTTP 请求并相应地处理来做同样的事情。

例如

$request_path = $_SERVER['PATH_INFO'];
$request_path = explode("/", $request_path);

// example.com/apps.php/id/blahblah
// $request_path[0] => "example.com"
// $request_path[1] => "apps.php"
// $request_path[2] => "id"
// $request_path[3] => "blahblah"

请注意,我将 .php 扩展名添加到 apps。如果你想隐藏.php 扩展,你必须使用mod_rewrite

从这里开始,您可以使用$request_path 来确定请求想要什么。

【讨论】:

    猜你喜欢
    • 2016-06-20
    • 2019-05-02
    • 2012-05-28
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 2019-03-24
    相关资源
    最近更新 更多