RewriteRule每个用户不同的页面

时间:2014-05-02 18:40:45

标签: php apache .htaccess mod-rewrite redirect

我决定为在网站上注册的每个用户创建单独的个人资料链接。我正在使用.htaccess文件RewriteRule来实现此目的。我想要实现的网址应该类似于www.domain.com/username。 (我不想要www.domain.com/users/username)

现在的问题是,如果我添加RewriteRule ^(.*)$ /users.php?username=$1之类的规则 它将匹配www.domain.com的所有URL地址,这可能指向任何路径。即使我想访问www.domain.com/about页面,它也会被重定向到
 www.domain.com/users.php?username=about,我不想要。 (即使请求是www.domain.com/products/abc

我可以在users.php中应用过滤器来过滤此类用户名,或者如果在数据库中找不到用户名,则重定向到该页面,但这意味着每次我决定添加新页面时都必须更改过滤器我的目录(在这种情况下,任何)。此外,所有流量都将定向到1页,这可能会导致性能问题。

请建议一种方法来实现这一点,因为有些网站可以像这样工作。可能的RewriteRule或PHP代码来实现这一点。

2 个答案:

答案 0 :(得分:2)

您可以在根目录中使用此规则.htaccess:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(\w+)/?$ /users.php?username=$1 [L,QSA]

答案 1 :(得分:1)

我总是使用简单的重写,如下所示:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)(.*)/?$ index.php

所有流量都被重定向到index.php并使用php我可以根据url运行特定的控制器。你也应该考虑一下。几乎所有框架都使用这样的规则。

然后在你的PHP文件中你应该检查

$_SERVER['REQUEST_URI']

将请求路由到特定控制器的变量