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

Php 我想在url中使用用户名作为页面地址,php,yii2,yii2-advanced-app,Php,Yii2,Yii2 Advanced App,例如,我想直接访问用户名页面,如下所示: mysite.com/username 重定向到我的SiteController。它被命名,并由服务器通过某些服务器模块提供。例如,apache中的mod_rewrite 配置后,它将从URL获取所需的参数,并通过QUERY_STRING环境变量以通常的方式将它们发送到脚本 您不应该更改php代码。请在.htaccess中尝试此操作 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d Rewrite

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

mysite.com/username
重定向到我的SiteController。

它被命名,并由服务器通过某些服务器模块提供。例如,apache中的
mod_rewrite

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


您不应该更改php代码。

请在.htaccess中尝试此操作

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)$ /SiteControllet.php?id=$1 [L]
这实际上将作为
Sitecontroller.php?用户名=somename 您需要使用user.php来查找数据

当然,首先需要启用 修改 在apache配置中

Umcomment配置文件中的此行:

LoadModule rewrite_module modules/mod_rewrite.s

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

创建一个名为“.htaccess”的文件,并在该文件中写入以下内容

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


另外,我不是以英语为母语的人。

有几种解决方法,但我认为有一种更适合我的方法

首先,您需要web文件夹中的默认.htacces文件:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php 
然后,您需要在common/config/main或frontend/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
        ],
    ],
],
您可能还发现以下链接很有用:

编辑: 哦,等等!你想让所有的站点/操作都在你的URL.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>',
        ],
    ],
“组件”=>[
“urlManager”=>[
'class'=>'yii\web\UrlManager',
//禁用index.php
'showScriptName'=>false,
//禁用r=路由
“enablePrettyUrl”=>true,
“规则”=>[
“/”=>“/视图”,
'//' => '/',
'/' => '/',
''=>'站点/',
],
],
或:

“组件”=>[
“urlManager”=>[
'class'=>'yii\web\UrlManager',
//禁用index.php
'showScriptName'=>false,
//禁用r=路由
“enablePrettyUrl”=>true,
“规则”=>[
“/”=>“/视图”,
'//' => '/',
'/' => '/',

'要求向上投票是站不住脚的。请注意这一点。谢谢,当我使用site.com/profile/username时,它是有效的,但我想要site.com/usernameOkey,所以原始url是/site/profile/username?是的,按照“编辑”之前的步骤操作'我试过了,效果很好。
'=>'site/profile'
在您的urlManager中,以及siteControllerI中的actionProfile我解决了,我使用了这个'restaurant/'=>'site/'。谢谢Jorgen
'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>',
        ],
    ],