如何在php中使用用户名作为url的一部分

时间:2013-11-01 13:27:07

标签: php regex apache .htaccess mod-rewrite

假设我有一个网站

  

www.mysite.com

无论如何必须要有用户页面网址

  

www.mysite.com/username

而不是通常的

  

www.mysite.com/user.php?id=whatever

我想知道如果没有多个文件夹和索引页面,这是否可行。我想避免使用文件夹方法,因为根据我的理解,你会遇到效率问题,特别是如果你必须从一个用户反弹到另一个用户。我想这样做,因为有人说从

获取我的信息要容易得多
  

www.mysite.com/username

比其他选项。任何帮助(教程,网站等)将不胜感激。提前谢谢。

3 个答案:

答案 0 :(得分:2)

  
    

我想知道如果没有多个文件夹和索引页面,这是否可行。

  

是的,它可能。您可以将所有请求重定向到index.php并手动处理此URL(路由)

示例.htaccess用于将所有请求重定向到index.php

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?route=$1 [L,QSA]

但是实施

www.mysite.com/username

并不容易。您必须知道所有系统用户,例如/ register,/ login,/ post,...等,并且不允许注册这些用户名。 我建议你实施这个方案:

www.mysite.com/~username 要么 www.mysite.com/user/username

答案 1 :(得分:2)

front controller pattern应用于任何类型的路由器[例如klein],那么您的webroot中需要一个通用的.htaccess文件:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

答案 2 :(得分:1)

是的,请在DOCUMENT_ROOT/.htaccess文件中使用此规则:

RewriteEngine On

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