【问题标题】:Yii2 pretty url works on hosting but not locallyYii2 漂亮的 url 适用于托管,但不适用于本地
【发布时间】:2016-12-18 08:08:13
【问题描述】:

我在 Yii2 中使用控制器操作来提供图像(如果需要,可能在调整大小之后)并保持它们对非站点成员隐藏。

动作是站点控制器中的actionImage($id)。 图像存储在名为 images 的基本目录下,该目录可能位于 DOCUMENT_ROOT 之外。 该操作采用一个参数,该参数是 images 文件夹下图像的相对路径,例如文章/myimage.jpeg 我有以下配置:

  'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'enableStrictParsing' => false,
            'rules' => [
               ...
               'site/image/<id:^(\w+/){1}(\w+/){0,9}\w+\.\w+$ >' => 'site/image',
                ...
               ,
            ],

有了这个,我希望 /site/image/articles/pasajes036.jpg 在图像下提供文章/pasajes.jpg。

我也在规则中尝试了&lt;id:.+&gt;,但结果相同,即:

  • 由远程服务器运行时可以正常工作。
  • 在 yii 嵌入式服务器(php yii serve)运行时不起作用 回应是

请求的资源 /site/image/articles/pasajes036.jpg 不是 在此服务器上找到。 - 调用时正确提供图像

http://localhost:8080/site/image?id=articles/pasajes036.jpg
  • 其他漂亮的 url 在两个服务器(本地和远程)上都可以工作
  • 即使图像文件夹放在 DOCUMENT_ROOT 下也无法在本地工作

感谢您的帮助。

【问题讨论】:

  • 你的服务器和本地操作系统和网络服务器是什么?
  • 其实只是点惹麻烦。
  • 我用非常简单的模式来测试它,比如 \w+\.\w+ 。它仅适用于远程服务器。
  • 我忘了回答。 Apache 用于远程,yii 嵌入用于本地

标签: php image yii


【解决方案1】:

您需要为服务器设置重写规则才能使漂亮的 URL 正常工作。

在 Apache 的情况下,这很简单 - 您可以使用 mod_rewrite 模块。

对于内置的 PHP 服务器,它更复杂但仍然可能。 gonzalo123.com 有例子:

但是,它可以与内置的 Web 服务器一起使用吗?答案是肯定的,但使用另一种语法。我们只需要创建一个路由器文件并用这个路由器启动我们的服务器:

<?php
// www/routing.php
if (preg_match('/\.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"])) {
    return false;
} else {
    include __DIR__ . '/index.php';
}

现在我们启动服务器:

php -S localhost:8888 www/routing.php

所以您只需要创建将处理重写的路由 PHP 脚本。

【讨论】:

  • 感谢您的回答。我不确定我是否理解得很好,因为这似乎与我的预期相反。使用您对 yii 嵌入式服务器的建议会导致 localhost:8080/routing.php//filename.jpeg 之类的 url 被拒绝。但是当写 if (preg_match ('/\.(?:)$/', ... config/web.php 中的 url 规则适用于所有文件扩展名时。
  • 它甚至可以与仅包含包含行的 routing.php 一起使用
  • 这只是示例,您必须根据需要对其进行修改。
猜你喜欢
  • 2015-07-04
  • 1970-01-01
  • 2012-10-29
  • 1970-01-01
  • 2013-09-29
  • 1970-01-01
  • 1970-01-01
  • 2017-05-01
  • 2015-10-05
相关资源
最近更新 更多