Dot-Htaccess

推薦的 htaccess 打破所有靜態內容

  • January 7, 2020

我正在努力展示我網站的 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.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]

引用自:https://serverfault.com/questions/997995