我正在努力展示我网站的 CSS、IMG 和 JS 资源。我的网站有这样的结构:
root
classes
templates
public
images
scripts
styles
index.php
Procfile
apache.conf
现在,我知道这个问题是由我的 apache 重写引起的,因为当我包含它们时,我的 PHP 可以工作,但我的图像不能。当我不包括它们时,我的 PHP 会被资产工作破坏。奇怪地以为我必须在我的重写规则前面添加一个斜杠,因为最初推荐的 index.php 不起作用,必须更改为 /index.php
我的 Proc 文件将 public 设置为根,我的重写如下所示:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [NC,L]
有了以上内容,我的 PHP 代码就可以正常工作了。我的问题是,我怎样才能得到它,以便重写结果不会破坏我所有的资产加载?当我查看该站点的源代码时,它们位于正确的位置,只是我认为它们被阻止加载。
apache.conf
似乎是您的“服务器配置”。当 mod_rewrite 指令用于服务器上下文时,与目录(.htaccess
) 上下文相反,它们的工作方式不同,并且可能需要不同的语法。这解释了为什么您需要在替换字符串前面加上斜杠,以使其相对于 DocumentRoot(没有斜杠,它被视为相对于服务器根目录)。因此,
REQUEST_FILENAME
服务器变量不能在服务器上下文中按原样使用,因为请求尚未映射到文件系统。REQUEST_FILENAME
将与您的文件系统检查相同,REQUEST_URI
并且您的文件系统检查将失败(导致您的静态资源被重写)。要
REQUEST_FILENAME
在服务器上下文中获取变量的最终值,您需要使用基于 URL 的前瞻,即。%{LA-U:REQUEST_FILENAME}
.请尝试以下操作: