2012-03-07 126 views
0

你知道叽叽喳喳如何写入其网址是这样的: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/indexwww.mysite.com/index2转到同一页面,即使它们是两个不同的文件。顺便说一句,我已经在htaccess中设置隐藏文件扩展名。

请帮我

回答

1

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://stackoverflow.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值。

1
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,那将会容易得多。

+0

应该是正则表达式中的''前的'/'。只有/是可选项时才可以使用 – switz 2012-03-07 01:50:32

+0

。在这种情况下,我不认为这是必要的,因为它应该与第一个uri段进行比较。我会编辑帖子,但我认为这会让我们的评论非常混乱。 – 2012-03-07 01:51:51