我希望使用mod_rewrite来掩盖我网站上的用户个人资料。但是,他们的个人资料由/profile.php?id=1
格式的ID决定。 'user'和'id'都在mySQL表'users'中。有没有办法重新路由URL以阅读/user
?对不起,如果说得很清楚!
答案 0 :(得分:2)
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 = ..
}
答案 1 :(得分:0)
.htaccess将无法使用数据库中的信息来执行您所需的操作。即使你不应该这样做:)。
但是您可以做的是更改profile.php以便能够通过名称读取用户。让我们说使profile.php能够处理一个新的参数name =并在其中添加逻辑,以通过id或名称查看数据库。如果你有这个,那么路由到/profile.php?name=实际上是微不足道的。
您还必须更改网站生成以输出正确的网址。
另请参阅Cristian的答案,了解更多技术细节。最后这个想法是一样的。
答案 2 :(得分:0)
您不会在htaccess或任何类型的配置/重写规则中更改此设置。如果我理解你想要的东西,这将在你的应用程序PHP中完成。
在/profile.php?id=1
profile.php中(除了重写规则)源PHP文件,id是GET参数。它就像profile.php
执行时的一个参数。它们以source.php?get1=val1?get2=val2....
的形式出现,您可以通过数组$ _GET
如果您不希望用户看到该ID,您可以执行以下两项操作之一。
- 按照您的建议将其替换为用户。网址为'profile.php?username = XXX'
醇>
然后在您的代码中,您可能需要执行简单的数据库查询以从用户名获取id。应该是profile.php
中代码顶部的大约5行,其余的可以保持不变。请注意,如果您之前没有这需要唯一的用户名,并且某些特殊字符可能是URL中的get参数的问题?对于大多数用户名,需要唯一性并且不允许使用特殊字符,因此希望这不是问题。
- 保持身份,但要成为一名职员。网址为'profile.php' POST参数与get类似,但它们对用户不可见,因为它们不是URL字符串的一部分。只需在
醇>profile.php
中将$ _GET切换为$ _POST即可。代码仍会按ID识别用户,但他们将无法看到他们的ID。
在任何一种情况下,您都需要更改导致我们正在更改的descrubed URL的任何传入links.actions。
编辑 - 克里斯蒂安有一个很好的建议,类似于上面的#1,但允许更好看的网址,如profile/XXX
而不是'profile.php?username = XXX'。 profile.php
内的代码相同,他在profile.php
中的更改是相同的