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
值。
来源
2014-01-13 04:13:11
m59
应该是正则表达式中的''前的'/'。只有/是可选项时才可以使用 – switz 2012-03-07 01:50:32
。在这种情况下,我不认为这是必要的,因为它应该与第一个uri段进行比较。我会编辑帖子,但我认为这会让我们的评论非常混乱。 – 2012-03-07 01:51:51