自定义网址 - 为每个用户提供网址

时间:2013-11-17 18:41:24

标签: php .htaccess

我正在建立一个网站,我想自定义用户的个人资料,以便他们的个人资料网址分享他们的名字。例如,网站域名为www.example.com,用户的网址为www.example.com/username。

我认为这是一个惯例,因为我在网络上看到了这一点。这是通过为每个用户提供他们自己的目录以及这将是多么艰苦来完成的吗?

3 个答案:

答案 0 :(得分:1)

您正在寻找RewriteRule。我认为以下应该做:

RewriteRule ^(.*)$ index.php?username=$1 [NC]

这会将显示的网址(www.example.com/myusername)转换为带有index.php的GET参数的网址。您可以在内部使用的这个新网址如下所示:

www.example.com/index.php?username=myusername

更新:这是一个额外的说明,以回答您的评论中的问题:

上面的RewriteRule完全符合您的要求。用户可以输入www.example.com/username之类的网址,该网址将在内部重写(用户无需注意)到www.example.com/index.php?username=myusername。这样您就可以访问get变量($_GET["username"]),而无需用户看到它存在。

可以找到好的教程herehere

答案 1 :(得分:1)

我真的无法证明使用htaccess这样的事情。我只使用htaccess通过一个php文件(我的根index.php)来路由所有内容,并让php理清如何处理url。例如,您可以这样做:

$uri = trim($_SERVER['REQUEST_URI'], '/');
$pieces = explode('/', $uri);
$username = $pieces[0];

然后使用$username执行某些操作。

我解析和使用我的网址的方式比这更复杂,但它与你的问题无关。只要确保你做的任何事情都能解释任何可能的查询字符串等等。

mod-rewrite对性能不是很好,所以我不会滥用它。

根据您的评论更新。

这只是我原始代码示例的略微扩展:

//.htaccess - route all requests through index.php
RewriteCond %{REQUEST_URI} !\.(png|jpe?g|gif|css|js|html)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php [L]

这是你在index.php中可以做的一个例子:

$pieces = preg_split('-/-', $_SERVER['REQUEST_URI'], NULL, PREG_SPLIT_NO_EMPTY);
$username = $pieces[0];

include "users/{$username}.php";

现在您可以访问mysite.com/myUserNameHere,请求转到index.php,该请求会解析用户名并包含该用户的文件。

就像你问的那样处理路由。我说我的路由更复杂,但我的使用要复杂得多,所以它不相关。我只是警告我这里的代码不会考虑附加查询字符串的网址,例如“mysite.com/someUser/?foo=bar”。这是一个简单的过程来解析没有查询字符串的url,你应该能够处理它。如果您需要进一步帮助解析网址,请发帖询问。

答案 2 :(得分:0)

你的意思不是“真正的”URI,而是重写。因此,使用.htaccess,您可以将查看用户从example.com/user这样的常规URI重定向到example.com/users.php?name=user,而无需他看到它。

这是一种惯例,因为使URI更具可读性是有用的,它也可以让Google为该页面提供更好的排名,因为URI中可能有关键字,URI是更短,所以关键词更突出。

这是一个基本的重写,它是放在服务器某处的.htaccess文件中(大部分位于root中,因此可以从那里控制所有子文件夹):

 RewriteRule ^(.*)$ users.php?name=$1 [NC]