Php 自定义url-为每个用户提供一个url

Php 自定义url-为每个用户提供一个url,php,.htaccess,Php,.htaccess,我正在建立一个网站,我想自定义用户的配置文件,使他们的配置文件url共享他们的名字。例如,网站域为www.example.com,用户的url为www.example.com/username 我假设这是一个惯例,因为我在网络上到处都能看到。这是通过给每个用户提供他们自己的目录来实现的吗?这有多辛苦?你的意思不是“真正的”URI,而是重写。因此,使用.htaccess,您可以将查看用户从常规URI(如example.com/user)重定向到example.com/users.php?name=

我正在建立一个网站,我想自定义用户的配置文件,使他们的配置文件url共享他们的名字。例如,网站域为www.example.com,用户的url为www.example.com/username


我假设这是一个惯例,因为我在网络上到处都能看到。这是通过给每个用户提供他们自己的目录来实现的吗?这有多辛苦?

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

这是一种惯例,因为它有助于提高URI的可读性,它还可以让Google为该页面提供更好的排名,因为URI中可能有关键字,而且URI更短,因此关键字更突出

下面是一个基本的重写,它将放置在服务器上的.htaccess文件中,主要位于根目录中,以便它可以从此处控制所有子文件夹:

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

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

这是一种惯例,因为它有助于提高URI的可读性,它还可以让Google为该页面提供更好的排名,因为URI中可能有关键字,而且URI更短,因此关键字更突出

下面是一个基本的重写,它将放置在服务器上的.htaccess文件中,主要位于根目录中,以便它可以从此处控制所有子文件夹:

 RewriteRule ^(.*)$ users.php?name=$1 [NC]
你在找一个新的工作。我认为应采取以下措施:

RewriteRule ^(.*)$ index.php?username=$1 [NC]
这将把显示的url www.example.com/myusername转换为index.php的带有GET参数的url。您可以在内部使用的新url如下所示:

www.example.com/index.php?username=myusername
更新:这里有一个额外的澄清来回答您评论中的问题:

上面的规则完全符合您的要求。用户可以输入一个类似www.example.com/username的url,该url将在内部重写,而用户在www.example.com/index.php?username=myusername中从未注意到它。这样,您就可以访问get变量$\u get[username],而不让用户看到它的存在

很好的教程可以找到和下载

您正在寻找一个新的解决方案。我认为应采取以下措施:

RewriteRule ^(.*)$ index.php?username=$1 [NC]
这将把显示的url www.example.com/myusername转换为index.php的带有GET参数的url。您可以在内部使用的新url如下所示:

www.example.com/index.php?username=myusername
更新:这里有一个额外的澄清来回答您评论中的问题:

上面的规则完全符合您的要求。用户可以输入一个类似www.example.com/username的url,该url将在内部重写,而用户在www.example.com/index.php?username=myusername中从未注意到它。这样,您就可以访问get变量$\u get[username],而不让用户看到它的存在


很好的教程可以找到和下载

我真的无法证明将htaccess用于这样的东西是合理的。我只使用htaccess通过一个php文件my root index.php路由所有内容,并让php整理如何处理url。例如,您可以这样做:

$uri = trim($_SERVER['REQUEST_URI'], '/');
$pieces = explode('/', $uri);
$username = $pieces[0];
然后使用$username执行一些操作

我解析和使用url的方式比这要复杂一些,但这与你的问题无关。只要确保您所做的一切都能够解释任何可能的查询字符串等

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/myusername,请求转到index.php,它解析出用户名并包含该用户的文件


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

我真的无法证明使用htaccess进行类似的操作是合理的。我只使用htaccess通过一个php文件my root index.php路由所有内容,并让php整理如何处理url。例如,您可以这样做:

$uri = trim($_SERVER['REQUEST_URI'], '/');
$pieces = explode('/', $uri);
$username = $pieces[0];
然后使用$username执行一些操作

我解析和使用url的方式比这要复杂一些,但这与你的问题无关。只要确保您所做的一切都能够解释任何可能的查询字符串等

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

根据您的评论进行更新。 < p> 这里只是对我的原始代码示例的一个小小扩展:

//.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/myusername,请求转到index.php,它解析出用户名并包含该用户的文件


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

这是通过url重写完成的,可以使用您自己标记的.htaccess来完成。看一看-这是通过url重写完成的,可以使用您自己标记的.htaccess来完成。看一看-不,我的意思是,我希望用户档案的链接是www.example.com/username,这样用户就可以把它放在名片和类似的东西上。当用户单击我的个人资料时,链接将是www.example.com/username。我遇到的一个问题是,我需要链接本身的用户用户名来从数据库中提取信息。因此,如果我没有一个来自url的get变量,这将如何工作?你能告诉我一些教程吗?因为我也想从我所有的链接中删除.php,并且仍然可以得到变量。谢谢你的帮助。帕特里克谢谢你的链接。我在发帖时犯了一个错误。我想让变量的值成为用户名,这样我就可以用用户名查询数据库了。我将研究您提供给我的链接,以便更好地掌握内容。我将此指令放在httpd.conf文件中,但在这样做时,apache无法运行``选项上的重写引擎+多视图重写cond%{REQUEST\u FILENAME}-已重写COND%{REQUEST_FILENAME}-f RewriteCond%{REQUEST_FILENAME}\.php-f RewriteRule^/*$profile.php?用户名=$1[NC,L]RewriteCond%{REQUEST_FILENAME}-已重写COND%{REQUEST_FILENAME}-f RewriteCond%{REQUEST_FILENAME}\.php-f rewrite rule^/*/.$ad.php?username=$1和title=$2[NC,L]这些是一些错误:[Thu Dec 26 21:42:54.790828 2013][core:notice][pid 3996:tid 456]AH00094:命令行:“c:\\wamp\\bin\\apache\\apache2.4.4\\bin\\httpd.exe-dc:/wamp/bin/apache/apache2.4.4'[Thu Dec 21:42:54.792803][mpm:winnt:notice][pid 3996:tid 456]AH00418:父进程:已创建子进程6352[星期四12月26日21:42:55.176419 2013][mpm_winnt:注意][pid 6352:tid 340]AH00354:子进程:启动150个工作线程。[Sun Dec 29 10:07:34.187381 2013][mpm_winnt:notice][pid 3996:tid 456]AH00422:父级:收到关机信号-关闭服务器。这并没有说明任何问题,我认为您最好针对这些特定问题创建一个新问题。你无法在评论中输入足够的信息来快速有效地解决此问题。不,Patrick,我的意思是,我希望指向用户个人资料的链接是链接此www.example.com/username,以便用户可以将其放在名片和类似的东西上。当用户单击我的个人资料时,链接将是www.example.com/username。我遇到的一个问题是,我需要链接本身的用户用户名来从数据库中提取信息。因此,如果我没有一个来自url的get变量,这将如何工作?你能告诉我一些教程吗?因为我也想从我所有的链接中删除.php,并且仍然可以得到变量。谢谢你的帮助。帕特里克谢谢你的链接。我在发帖时犯了一个错误。我想让变量的值成为用户名,这样我就可以用用户名查询数据库了。我将研究您提供给我的链接,以便更好地掌握内容。我将此指令放在httpd.conf文件中,但在这样做时,apache无法运行``选项上的重写引擎+多视图重写cond%{REQUEST\u FILENAME}-已重写COND%{REQUEST_FILENAME}-f RewriteCond%{REQUEST_FILENAME}\.php-f RewriteRule^/*$profile.php?用户名=$1[NC,L]RewriteCond%{REQUEST_FILENAME}-已重写COND%{REQUEST_FILENAME}-f RewriteCond%{REQUEST_FILENAME}\.php-f rewrite rule^/*/.$ad.php?username=$1和title=$2[NC,L]这些是一些错误:[Thu Dec 26 21:42:54.790828 2013][core:notice][pid 3996:tid 456]AH00094:命令行:“c:\\wamp\\bin\\apache\\apache2.4.4\\bin\\httpd.exe-dc:/wamp/bin/apache/apache2.4.4'[Thu Dec 21:42:54.792803][mpm:winnt:notice][pid 3996:tid 456]AH00418:父进程:已创建子进程6352[星期四12月26日21:42:55.176419 2013][mpm_winnt:注意][pid 6352:tid 340]AH00354:子进程:启动150个工作线程。[Sun Dec 29 10:07:34.187381 2013][mpm_winnt:notice][pid 3996:tid 456]AH00422:父级:收到关闭信号-关闭服务器。这与问题无关,我认为您最好使用此spe创建一个新问题
cific问题。你不能在评论中输入足够的信息来快速有效地解决这个问题。你说你的URL比这里的更复杂,所以请告诉我在哪里可以学习复杂的URL。我的项目要求用户不要看到.php扩展名,即使后面的页面有扩展名,我也不知道如何执行这些操作。@Iamcoder我用精确的代码更新了我的答案,以解析用户名并包含特定于该用户的内容。有很多方法可以解决你的问题,但是决定你真正想做什么需要你做大量的研究。@lamcoder你感谢我的回答吗?如果这里有一个有用的答案,请单击您认为最好的答案旁边的“接受”复选标记。@Iamcoder有上下箭头,中间有一个数字-复选标记在下面。我现在看到了箭头。我试着投你一票,但上面说我必须有15个名声才能投你一票。你对我的问题投票了吗?你说你的URL比你这里的更复杂,所以请告诉我在哪里可以学习复杂的URL。我的项目要求用户不要看到.php扩展名,即使后面的页面有扩展名,我也不知道如何执行这些操作。@Iamcoder我用精确的代码更新了我的答案,以解析用户名并包含特定于该用户的内容。有很多方法可以解决你的问题,但是决定你真正想做什么需要你做大量的研究。@lamcoder你感谢我的回答吗?如果这里有一个有用的答案,请单击您认为最好的答案旁边的“接受”复选标记。@Iamcoder有上下箭头,中间有一个数字-复选标记在下面。我现在看到了箭头。我试着投你一票,但上面说我必须有15个名声才能投你一票。你对我的问题投票了吗?