我希望得到我需要用来解决以下问题的步骤和概念(而不是特定代码)。
我有一个LAMP网站,提供目前作为 www.site.com/profile.php?id=user_id 提供的个人资料。我想要的是 www.site.com/uniqueusername 。我已经阅读了.htaccess mods上的几个主题,但我认为我的情况有点不同。我需要做的是:
该网站目前使用电子邮件地址作为登录的唯一标识符,该标识符与用户ID匹配。我希望在注册过程中添加一个用户名字段,用于用户个人资料页面的URL。
正如我之前所说,我将非常感谢您对完成上述任务所需的概念和步骤的任何帮助。
答案 0 :(得分:4)
我不是关于.htaccess文件的专家,但我可以向你解释我将如何做这件事,即使这可能不是最好的解决方案,它应该运作良好。
首先,你需要以一种接受用户名而不是用户id作为参数的方式制作profile.php文件,所以像profile.php?u = username。这是为了避免第2步,因为我似乎没有必要(如果用户名是唯一的,则不需要查询用户ID)。
然后,您编写一个简单的.htaccess规则,如
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9]+)/$ profile.php?username=$1
前两个条件检查请求的路径是否不是现有文件或目录,以下规则重写URL(如果以前的条件是假的,当然)
注意强>
我输入了一个尾部斜杠,因为我使用了另一个规则,它为每个请求添加了一个尾部斜杠(这是为了避免重复的内容有一个不同的页面,一个没有斜杠)。就是这样:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(.*)/$ # check if the URL already ends with a slash
RewriteRule ^(.*)$ http://website.com/$1/ [L,R=301]
当然,如果需要,您可能需要添加其他条件,但我想这是解决问题的一般方法
答案 1 :(得分:1)
这是一个非常简单的问题(一旦你知道了这些步骤)。
请记住,当mod_rewrite
重写对本地网址的请求时,默认行为是在内部执行。
因此,有了这条规则:
RewriteEngine on
RewriteRule ^/([a-zA-Z0-9]+)$ /profile.php?id=$1
您将自动让/profile.php捕获传递的id。
由于Web客户端(例如,浏览器)不是更明智的,因此从PHP脚本返回的任何内容都将直接发回到浏览器,而不会出现进一步的问题。
用户甚至不知道你在使用PHP(除非你发送一个标题,他们懒得看)。
在PHP脚本中,它很简单:
<?php
$id = trim(isset($_GET['id']) ? $_GET['id'] : '');
if(empty($id))
{
die('User not found');
}
// look up in db, etc...
// render page