的.htaccess和用户帐户
你知道叽叽喳喳如何写入其网址是这样的:twitter.com/{username}?的.htaccess和用户帐户
他们如何做到这一点?它必须包含一些htaccess编码。我试了一下,但是当我的代码用户名或其他东西一次又一次地显示同一页时,我的代码就会感到困惑。
这里是我的代码:
RewriteRule ^([^/]+)$ login/id.php?name=$1
RewriteRule ^#/([^/]+)$ tags/tag.php?name=$1
所以,如果我写www.mysite.com,它需要我的主页,如果我键入www.mysite.com/{random name that is not a register user}
,再次带我到了家。这会在网址中造成重大错误。 www.mysite.com/index
和www.mysite.com/index2
转到同一页面,即使它们是两个不同的文件。顺便说一句,我已经在htaccess中设置隐藏文件扩展名。
请帮我
htaccess
是不是最好的性能,比处理与PHP路由较为有限。首先,你用htaccess
只直接最请求到PHP文件:
RewriteCond %{REQUEST_URI} !\.(png|jpe?g|gif|css|js|html)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php [L]
然后,你的路由可能是简单的:
$pieces = preg_split('-/-', $_SERVER['REQUEST_URI'], NULL, PREG_SPLIT_NO_EMPTY);
$username = $pieces[0];
include "users/{$username}.php";
但有很多事情需要做一个真正的应用上下文。有许多内置路由功能的php框架可能会让你感兴趣。任何主要的框架都会包含这个功能。
下面是这个答案的一个类似以前的帖子一个性能稍微扩展版本:https://*.com/a/20034826/1435655
要展开多一点,基本思路最路由系统使用的是你写出来的,你接受什么会处理它们的路由。当请求进入时,搜索这些路由直到找到匹配。想想看这样的:
$myRoutes = [
'/' => 'home.php',
'/about' => 'about.php'
//etc
];
$route = $_SERVER['REQUEST_URI'];
if (in_array($route, $myRoutes)) {
include $myRoutes[$route];
}
else {
echo "Go to a real page. This one doesn't exist."
}
你可以展开来定义URL参数,以便/users/someDude
将被发送到users.php
和像$routeParams['username']
东西都会有someDude
值。
RewriteRule ^(.*)?$ tags/tags.php?name=$1 [NC,L]
仅此一项将改写一切标签/ tags.php文件。 您可以使用条件来排除某些重要的路径。
RewriteCond %{REQUEST_URI} !^\/?accounts[.*]$ [NC]
RewriteRule ^(.*)?$ tags/tags.php?name=$1 [NC,L]
...我想重写条件语法是正确的,但我没有测试它...
所以预期和一切路线标签文件应收一切都是理所当然/。 根据你的网站有多复杂,这可能是个好主意或坏主意。如果你的注意力集中在用户身上,而你有其他几个页面(如about,faq,contact等),那么你应该没问题。否则,你可能会陷入恶意的条件分类。
我用tags.php作为一个例子以及/账户。我不知道你的网站的结构,所以我不知道你的确切需求。这应该足以让你开始。
我的意思是,你可能要准备有很多的条件句你tags.php htaccess的规则之上,因为你是对第一个URI段比较。如果你的希望之路更像www.yoursite.com/user/username,那将会容易得多。
应该是正则表达式中的''前的'/'。只有/是可选项时才可以使用 – switz 2012-03-07 01:50:32
。在这种情况下,我不认为这是必要的,因为它应该与第一个uri段进行比较。我会编辑帖子,但我认为这会让我们的评论非常混乱。 – 2012-03-07 01:51:51