Yii2漂亮的url适用于托管,但不适用于本地

时间:2016-12-18 08:08:14

标签: php image yii

我在Yii2中使用控制器操作以提供图像(可能在需要时调整大小后),并使它们对非网站成员隐藏。

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

<id:.+>

有了这个,我希望/site/image/articles/pasajes036.jpg能够提供图片下的文章/ pasajes.jpg。

我也在规则中尝试了http://localhost:8080/site/image?id=articles/pasajes036.jpg 但结果是一样的,即:

  • 当由远程服务器运行时,它可以正常工作。
  • 由yii embeded服务器运行时不起作用(php yii serve) 回复是
  

请求的资源/site/image/articles/pasajes036.jpg没有   在这台服务器上找到。     - 使用

调用时图像正确显示
{{1}}
  • 其他服务器(本地和远程)上的其他相同网址
  • 即使图像文件夹位于DOCUMENT_ROOT下,它也无法在本地工作

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您需要为服务器设置重写规则,才能使漂亮的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脚本。