建议 htaccess 破坏所有静态内容

建议 htaccess 破坏所有静态内容

我正在努力让网站的 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 代码就可以正常工作了。我的问题是,我该如何做才能让重写结果不破坏我的所有资产的加载?当我查看网站源代码时,它们位于正确的位置,只是我认为它们被阻止加载。

答案1

上面有apache.confapache 重写

apache.conf似乎是你的“服务器配置”。当 mod_rewrite 指令用于服务器上下文,而不是目录( .htaccess) 上下文中的工作方式不同,并且可能需要不同的语法。这解释了为什么需要在替换字符串前面加上斜杠,以使其相对于 DocumentRoot(如果没有斜杠,则被视为相对于服务器根)。

因此,REQUEST_FILENAME服务器变量不能按原样使用服务器上下文,因为请求尚未映射到文件系统。REQUEST_FILENAME将与相同,REQUEST_URI并且您的文件系统检查将失败(导致您的静态资源被重写)。

要在服务器上下文中获取变量的最终值REQUEST_FILENAME,您需要使用基于 URL 的前瞻,即%{LA-U:REQUEST_FILENAME}。。

请尝试以下操作:

RewriteEngine On
RewriteCond %{LA-U:REQUEST_FILENAME} !-s
RewriteCond %{LA-U:REQUEST_FILENAME} !-l
RewriteCond %{LA-U:REQUEST_FILENAME} !-d
RewriteRule ^ /index.php [L]

相关内容