【发布时间】:2011-01-08 17:24:33
【问题描述】:
我希望使用 mod_rewrite 来屏蔽我网站上的用户配置文件。但是,他们的个人资料由他们的 id 决定,格式为 /profile.php?id=1。 'user' 和 'id' 都在 mySQL 表 'users' 中。有没有办法重新路由 URL 以读取/user?抱歉,如果解释得不好!
【问题讨论】:
我希望使用 mod_rewrite 来屏蔽我网站上的用户配置文件。但是,他们的个人资料由他们的 id 决定,格式为 /profile.php?id=1。 'user' 和 'id' 都在 mySQL 表 'users' 中。有没有办法重新路由 URL 以读取/user?抱歉,如果解释得不好!
【问题讨论】:
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 = ..
}
【讨论】:
.htaccess 将无法使用数据库中的信息来做你想做的事。即使可以,你也不应该这样做:)。
但是您可以做的是更改 profile.php 以便能够通过名称读取用户。假设让 profile.php 能够处理新参数 name= 并且您在其中添加逻辑以通过 id 或通过名称查看数据库。如果你有这个,那么将 / 路由到 /profile.php?name= 实际上是微不足道的。
您还必须更改网站生成以输出正确的网址。
另请参阅 Cristian 的回答以了解更多技术细节。最终还是一样的想法。
【讨论】:
您不会在 htaccess 中更改它,或者使用任何类型的配置/重写规则。如果我了解您想要什么,这将在您的应用程序 PHP 中完成。
/profile.php?id=1profile.php 是(重写规则除外)源 PHP 文件,id 是一个 GET 参数。它就像profile.php 执行时的一个参数。它们以 source.php?get1=val1?get2=val2.... 的形式出现,您可以通过数组 $_GET
如果您不希望用户看到该 ID,您可以执行以下两种操作之一。
- 按照您的建议将其替换为用户。 URL 将是 'profile.php?username=XXX'
然后在您的代码中,您可能需要执行一个简单的数据库查询以从用户名中获取 id。应该在profile.php 的代码顶部大约 5 行,其余的可以保持不变请注意,这需要唯一的用户名,以防您以前没有,并且某些特殊字符可能是 URL 中获取参数的问题?对于大多数用户名,需要唯一性并且不允许使用特殊字符,所以希望这不是问题。
- 保留 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 中的更改相同
【讨论】: