Php Yii2自定义url管理。获取400错误

Php Yii2自定义url管理。获取400错误,php,apache,.htaccess,yii-components,yii2,Php,Apache,.htaccess,Yii Components,Yii2,好吧,PHP时代 我的客户希望我使用Yii2作为他的项目的框架 我把它安装好并运行起来。没问题。我通过composer使用了高级模板 将我的web根目录设置为/frontend/web等 现在,我想使用这个url格式 website.com/messages/或website.com/messages/tom。。。等等 现在的安装方式是显示website.com/index.php?r=messages/index 我找到了这个文档 但我似乎不能把它弄清楚 这是我的步骤 我将apache服务器

好吧,PHP时代

我的客户希望我使用Yii2作为他的项目的框架

我把它安装好并运行起来。没问题。我通过composer使用了高级模板

将我的web根目录设置为/frontend/web等

现在,我想使用这个url格式

website.com/messages/或website.com/messages/tom。。。等等

现在的安装方式是显示website.com/index.php?r=messages/index

我找到了这个文档

但我似乎不能把它弄清楚

这是我的步骤

我将apache服务器配置为指向/usr/www/payroll/frontend/web/

我在我的web文件夹中添加了一个包含此内容的.htaccess文件

RewriteEngine on

# If a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward it to index.php
RewriteRule . index.php
我还添加了组件“urlManager”,如说明中所示。它似乎捕获并修改了请求

'components'=>[
    'urlManager' => [
            'class' => 'yii\web\UrlManager',
            'enablePrettyUrl' => true,
            'showScriptName' => 'false'
        ],
],
例如,如果我键入website.com,您可以看到它将/site/index添加到url。(如果url组件不活动,它只添加/index.php?site/index)

因此,显然有一个对url的修改(通过UrlManager),但我得到404错误

我这里的点子快用完了。我不熟悉Php、Apache和Yii2。任何帮助,非常感谢


如果您想这样使用
http://domain.com/controller_name/action_name
,您只需在配置文件中启用漂亮的url:

'components'=>[
    'urlManager' => [
            'class' => 'yii\web\UrlManager',
            'enablePrettyUrl' => true,
            'showScriptName' => 'false'
        ],
],
现在,您可以随意使用URL`website.com/messages/或website.com/messages/tom


如果您想在url中使用查询字符串,这就是Yii 2
website.com/message?id=12的工作方式。好的,下面是解决方案

在Apache的最新版本(从2.3.9开始)中,AllowOverride默认设置为NONE。以前的版本已将AllowOverride设置为ALL

Yii2假设AllowOverride将设置为ALL

如果你想在Yii论坛上阅读全文,这里是链接


感谢您的帮助和信息

要在Yii 2.0上运行漂亮的URL,您需要两件事:

1:编辑
/frontend/config/main.php
(或者在您的情况下编辑适当的主配置)并添加:

'components'=>[
        'urlManager' => [
                'class' => 'yii\web\UrlManager',
                'enablePrettyUrl' => true,
                'showScriptName' => false,
            ],
    ],
2:在您的WEB根文件夹中添加.htaccess文件。 在yii 2.0 advanced中,这不是项目根目录,而是:
/frontend/web

.htaccess示例:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule . index.php

只需将'showScriptName'=>'false'更改为'showScriptName'=>false,它就可以运行了

对于Yii2 basic,我刚刚将下面的代码添加到/myappfolder/config/web.php中:

“urlManager”=>[

'class'=>'yii\web\UrlManager'

“enablePrettyUrl”=>true

'showScriptName'=>false

]

另外,在/myappfolder/web/中添加了.htaccess:

重新启动发动机

重写cond%{REQUEST_FILENAME}-f

重写cond%{REQUEST_FILENAME}-d

重写规则。index.php


这对我很有效。希望这能帮助其他有同样问题的人。:)

我不明白任何站点页面是否有效?如果我将组件代码存根添加到配置文件中,它就不会起作用。无论我做什么,它都不会显示website.com/controller/action。。。。如果我将组件代码添加到我的配置中,它甚至不会像默认情况下那样工作。。。意思是,website.com/index.php?r=controller/action'showScriptName'=>'false'应该有'showScriptName'=>false抱歉,这里输入的是错误的,而不是代码。在我的代码中,它显示false而不是false。如果有人使用Yii2基本模板,则主配置文件是
basic/config/web.php
。谢谢。@GastónSánchez你是说
项目根目录/config/web.php
?'showScriptName'=>'false'应该是'showScriptName'=>false