我想在网址中使用用户名作为页面地址

时间:2016-03-12 14:50:37

标签: php yii2 yii2-advanced-app

例如,我想直接访问用户名页面,如下所示:

mysite.com/username

重定向到我的SiteController。

4 个答案:

答案 0 :(得分:2)

它名为URL rewriting,由服务器通过某个服务器模块提供。例如,apache中的mod_rewrite

配置完成后,它将从URL获取所需的参数,并通过QUERY_STRING环境变量以通常的方式将它们发送到您的脚本。

你不应该改变你的PHP代码。

答案 1 :(得分:2)

在.htaccess

中试试
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)$ /SiteControllet.php?id=$1 [L]

这实际上将作为
工作     Sitecontroller.php?用户名= somename 您需要使用user.php来查找数据。

首先,您需要启用     mod_rewrite的 在apache配置中。

在配置文件中取消此行:

LoadModule rewrite_module modules/mod_rewrite.s

请记住,.htaccess应该在根文件夹中。

答案 2 :(得分:2)

有几种解决方案,但我认为有更类似Yii的方法。

首先,您需要在您的网络文件夹中使用默认的.htacces文件:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php 

然后你需要你的common / config / main或你的前端/ common / main中的urlManager。

'components' => [
    'urlManager' => [
        'class' => 'yii\web\UrlManager',
        // Disable index.php
        'showScriptName' => false,
        // Disable r= routes
        'enablePrettyUrl' => true,
        'rules' => [
            '<controller:\w+>/<id:\d+>' => '<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
            '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
            '<username:\w+>' => 'site/profile'  // This will handle your usernames
        ],
    ],
],

最后是站点控制器中的actionProfile($ username)

public function actionProfile($username) {
    $model = \common\models\User::find()->where(['username' => $username])->one();
    die($model->username);
}

您可能还会发现这些链接很有用:

http://www.yiiframework.com/doc-2.0/yii-behaviors-sluggablebehavior.html http://www.yiiframework.com/doc-2.0/yii-web-urlmanager.html

修改 等一下!您希望所有站点/操作都能在yoururl.com/actions上运行吗?

然后你需要

'components' => [
        'urlManager' => [
        'class' => 'yii\web\UrlManager',
        // Disable index.php
        'showScriptName' => false,
        // Disable r= routes
        'enablePrettyUrl' => true,
        'rules' => [
            '<controller:\w+>/<id:\d+>' => '<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
            '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
            '<alias:index|all|your|actions|here>' => 'site/<alias>',
        ],
    ],

或者:

'components' => [
        'urlManager' => [
        'class' => 'yii\web\UrlManager',
        // Disable index.php
        'showScriptName' => false,
        // Disable r= routes
        'enablePrettyUrl' => true,
        'rules' => [
            '<controller:\w+>/<id:\d+>' => '<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
            '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
            '<action:\w+' => 'site/<action>',
        ],
    ],

答案 3 :(得分:0)

创建一个名为&#39; .htaccess&#39;的文件并在文件中写下以下内容

RewriteEngine On
RewriteCond %{filename} !-d
RewriteCond %{filename} !-f
RewriteRule ^([^/]*)$ /user.php?id=$1 [L]
希望它有所帮助! :d 或者对于更高级的选项,您可以搜索&#34; url-rewriting&#34;

P.S。我不是母语为英语的人。