6

我使用一个.htaccess文件将所有请求重定向到同一个index.php. 从那里,我根据传入请求的 URL 决定做什么。

现在,我将请求 URL 映射到相对于source文件夹的目录结构,以便example.com/user/create映射到source/user/create/index.php. 位于那里的文件可以根据需要处理请求,并生成 HTML 输出。

但这不适用于静态资产,浏览器可能会要求。所以我的想法是找出请求 URL 是否以文件扩展名结尾,并将其映射到相对于assets文件夹的目录结构,以便example.com/css/default.css映射到assets/css/default.css. 但我不知道如何用静态文件而不是 PHP 的 HTML 代码来响应。

通常,这可以使用附加.htaccess规则来完成,但我想在代码中动态更改资产文件夹。

如何将服务器硬盘上的静态文件发送到 PHP 中的浏览器客户端?

4

2 回答 2

3

好吧,如果你真的想,你可以使用readfile(). 但如果可以的话,最好让 Web 服务器处理静态文件;它比启动 PHP 只是为了把文件扔出去更有效。

此外,使用 PHP 方法,您可能必须为每个文件设置适当的 Content-Type 标头,这可能很烦人。在直接提供文件时,您的 Web 服务器已经为您执行此操作。

另外,此时您可能需要考虑“免费”获得的其他一些东西——ob_gzhandler如果您想压缩页面,就使用它,就像 Apache 可能已经为静态文件所做的那样。

所以,虽然它是可能的,而且我可以看到它有时是可取的原因,但我可能会尝试使这种处理异常而不是通常不是动态的文件的规则......

于 2013-11-03T14:02:36.350 回答
2

在过程中

#Expections
RewriteCond %{REQUEST_URI} ^/assets.*$
RewriteRule ^(.*)$ - [L,NC]

#You redirect to index
...

将 / 放在文件路径的开头

/assets/path/to/file
于 2013-11-03T15:37:19.353 回答