【问题标题】:.htaccess converting id to user via mySQL database.htaccess 通过 mySQL 数据库将 id 转换为用户
【发布时间】:2011-01-08 17:24:33
【问题描述】:

我希望使用 mod_rewrite 来屏蔽我网站上的用户配置文件。但是,他们的个人资料由他们的 id 决定,格式为 /profile.php?id=1。 'user' 和 'id' 都在 mySQL 表 'users' 中。有没有办法重新路由 URL 以读取/user?抱歉,如果解释得不好!

【问题讨论】:

    标签: php mysql .htaccess


    【解决方案1】:
    RewriteEngine on
    RewriteRule ^profile/([^/\.]+)/?$ /profile.php?user=$1 [L]
    

    这将导致所有 /profile/username 被重定向到 profile.php?user=username。然后您可以签入您的 PHP:

    if (isset($_GET['user'])) {
      // Check if the username exists.
      // SELECT ... FROM users WHERE username = ..
    }
    

    【讨论】:

    • 感谢您的回复,这几乎就是我要找的。如果页面是 www.domain.com/profile?id=1,我将如何做到这一点,以便将其重新路由到该用户 id=1 的 www.domain.com/user?
    • 在 PHP 中,只需通过 ID 找到用户,并使用 header('location: ') 将他重定向到 url。
    【解决方案2】:

    .htaccess 将无法使用数据库中的信息来做你想做的事。即使可以,你也不应该这样做:)。

    但是您可以做的是更改 profile.php 以便能够通过名称读取用户。假设让 profile.php 能够处理新参数 name= 并且您在其中添加逻辑以通过 id 或通过名称查看数据库。如果你有这个,那么将 / 路由到 /profile.php?name= 实际上是微不足道的。

    您还必须更改网站生成以输出正确的网址。

    另请参阅 Cristian 的回答以了解更多技术细节。最终还是一样的想法。

    【讨论】:

      【解决方案3】:

      您不会在 htaccess 中更改它,或者使用任何类型的配置/重写规则。如果我了解您想要什么,这将在您的应用程序 PHP 中完成。

      /profile.php?id=1profile.php 是(重写规则除外)源 PHP 文件,id 是一个 GET 参数。它就像profile.php 执行时的一个参数。它们以 source.php?get1=val1?get2=val2.... 的形式出现,您可以通过数组 $_GET

      访问它们

      如果您不希望用户看到该 ID,您可以执行以下两种操作之一。

      1. 按照您的建议将其替换为用户。 URL 将是 'profile.php?username=XXX'

      然后在您的代码中,您可能需要执行一个简单的数据库查询以从用户名中获取 id。应该在profile.php 的代码顶部大约 5 行,其余的可以保持不变请注意,这需要唯一的用户名,以防您以前没有,并且某些特殊字符可能是 URL 中获取参数的问题?对于大多数用户名,需要唯一性并且不允许使用特殊字符,所以希望这不是问题。

      1. 保留 id 但将其设为 POST peremeters。 URL 将是“profile.php” POST 参数与 get 类似,但它们对用户不可见,因为它们是 URL 字符串的一部分。只需在profile.php 中将 $_GET 切换为 $_POST。该代码仍将通过 ID 识别用户,但他们将无法看到自己的 ID。

      在任何一种情况下,您都需要更改任何导致我们正在更改的描述 URL 的传入 links.actions。

      编辑 - Christian's 有一个很好的建议,它类似于上面的 #1,但允许使用更好看的 URL,如 profile/XXX 而不是 'profile.php?username=XXX'。 profile.php 中的代码不会相同,profile.php 中的更改相同

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-11
        • 2012-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-01
        相关资源
        最近更新 更多