将profile.php?user = username重写为个人资料/用户名

时间:2017-12-05 10:44:20

标签: php apache .htaccess mod-rewrite

我创建了一个非常基本的php模板系统,用于显示带有此URL的页面:/basedir/index.php?page = home

home 内容由脚本home.php提供。

在.htaccess中使用重写规则,我希望我的网址看起来像这样:/ basedir / home。

我遇到的问题是,在重写一个我用于显示用户个人资料的GET变量时,我遇到了困难。目前,个人资料页面网址如下所示:/ basedir / profile?user = username。

现在我希望它看起来像这样:/ basedir / profile / username。

到目前为止,我的.htaccess看起来像这样:

RewriteEngine On

RewriteBase /basedir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) ?page=$1 [L,QSA]

我不知道这是好还是我必须写一个全新的.htaccess文件。

2 个答案:

答案 0 :(得分:0)

根据你的代码和我有限的理解,我猜这样的事情:

RewriteRule ^profile/([^?]*) ?page=profile&user=$1 [L,QSA]

..将其插入RewriteRule ^([^?]*) ?page=$1 [L,QSA]

上方

答案 1 :(得分:0)

正如您在http://htaccess.mwl.be/所见,您的网址http://www.example.com/profile/username已转换为http://www.example.com/basedir/?page=profile/username

现在您需要做的是将index.php放入basedir爆炸page并检索用户名。

$page = $_GET['page'];
$parts = explode('/', $page);


switch($parts[0]){
    case 'profile':
        if(isset($parts[1])){
             $username = $parts[1];
             return doWhatEverYouWantToDoWithUsername($username);
        }
        return handleJustProfilePage();

    default:
        return yourDefaultHandler();

}

这种方法称为routing,您可以通过一些外部路由库来改进。