【问题标题】:Yii2 Custom url management. Getting 400 errorYii2 自定义 url 管理。收到 400 错误
【发布时间】:2014-05-24 11:44:15
【问题描述】:

嗯,PHP 时代。

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

我启动并运行它。没问题。我通过 composer 使用了高级模板。

将我的网络根设置为 /frontend/web 等。

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

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

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

我找到了这个文档...

https://github.com/yiisoft/yii2/blob/master/docs/guide/url.md

但我似乎无法弄清楚。

这是我的步骤...

我将我的 apache 服务器配置为指向 /usr/www/payroll/frontend/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 的新手。任何帮助,不胜感激。

谢谢

【问题讨论】:

  • 我不明白任何网站页面都有效吗?
  • 如果我将组件代码存根添加到我的配置文件中,它不会。
  • 无论我做什么,它都不会显示 website.com/controller/action....如果我将组件代码添加到我的配置中,它甚至无法正常工作。 . 含义,website.com/index.php?r=controller/action
  • 'showScriptName' => 'false' 应该有 'showScriptName' => false
  • 抱歉,这里打错了,不是代码。在我的代码中,它显示 false 而不是 'false'。

标签: php apache .htaccess yii-components yii2


【解决方案1】:

要在 Yii 2.0 上制作漂亮的 URL,你需要做两件事:

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

'components'=>[
        'urlManager' => [
                'class' => 'yii\web\UrlManager',
                'enablePrettyUrl' => true,
                'showScriptName' => false,
            ],
    ],

2:在您的网络根目录文件夹中添加一个.htaccess 文件。 在 yii 2.0 高级版中,这是 NOT 项目根目录,而是: /frontend/web

.htaccess 示例:

RewriteEngine on

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

RewriteRule . index.php

【讨论】:

  • 如果有人使用 Yii2 基本模板,主配置文件是basic/config/web.php。谢谢。
  • @GastónSánchez 你是说project_root_dir/config/web.php 吗?
  • 'showScriptName' => 'false' 应该是 'showScriptName' => false
【解决方案2】:

对于 Yii2 basic,我只是将以下代码添加到 /myappfolder/config/web.php:

'urlManager' => [

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

'enablePrettyUrl' => 真,

'showScriptName'=>假,

]

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

重写引擎开启

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

重写规则。 index.php

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

【讨论】:

    【解决方案3】:

    只需将 'showScriptName' => 'false' 更改为 'showScriptName' => false 就可以了

    【讨论】:

      【解决方案4】:

      好的,这就是解决方案。

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

      Yii2 假设 AllowOverride 将被设置为 ALL。

      如果你想在 Yii 论坛上阅读整个帖子,这里是链接

      http://www.yiiframework.com/forum/index.php/topic/53295-url-manager-for-seo-friendly-url-404-error-code/

      感谢您的帮助和留言!

      【讨论】:

        【解决方案5】:

        如果你想像这样使用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

        【讨论】:

          猜你喜欢
          • 2020-06-17
          • 1970-01-01
          • 2013-02-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多