我决定为在网站上注册的每个用户创建单独的个人资料链接。我正在使用.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代码来实现这一点。
答案 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']
将请求路由到特定控制器的变量