Rewrite

子目錄中的 FallbackResource

  • October 23, 2019

我使用前端控制器和以下 htaccess 文件管理大量 PHP 應用程序:

FallbackResource /index.php

是的,這是整個文件(對於每個應用程序)!

但是,一些站點位於子文件夾中,需要進行以下更改:

FallbackResource /subfolder/index.php

正如你可能猜到的,/開頭的意思是路徑是相對於站點/虛擬主機的,這裡的路徑需要是相對於目錄的。

(如果我使用mod_rewrite它而不是mod_dir,我必鬚RewriteBase根據需要以類似的方式將 a 添加到每個子目錄。)

我認為我可以通過以下方式解決這個問題:

FallbackResource index.php # No slash!

但是,當站點的重寫包含斜杠時,例如,如果應用程序是/store/並且其中的路徑是products/1234,則 Apache 會查找/store/products/index.php而不是/store/index.php並在日誌中返回 500 和以下消息:

由於可能的配置錯誤,請求超出了 10 個子請求嵌套級別的限制。如有必要,使用“LimitInternalRecursion”增加限制。使用“LogLevel debug”獲取回溯。

我會認為FallbackResource路徑是相對於配置它的 .htaccess 文件的,但它似乎實際上是相對於請求的 URL。

有沒有辦法FallbackResource按照我的預期行事?


如果這是答案,我可以按原樣使用它,但是如果可以這樣做,它將使管理我擁有的站點變得容易得多。這些站點使用具有不同主題和數據庫連接的相同基本程式碼,現在它的工作方式我必須在每次部署新版本的程式碼時修改 htaccess 文件(因為它已簽入 Git)。如果我們可以讓某人不必每次都記住進行此修改,那將是非常棒的。

我最初問這個問題的網站不再存在,但這就是我最終要做的。

我最終將這些站點移動到執行 Nginx 的伺服器上,其中所有配置都使用try_files指令在伺服器的配置文件中完成。以這種方式進行管理要容易得多。

我認為這不容易做到。我已經嘗試使用這兩個指令中可用的新變數插值在主配置文件中進行DirectoryMatch各種組合。LocationMatch

儘管類似FallBackResource index.html的配置是完全有效的,但我同意 Michael Hampton 的擔憂,即任何使用相對 URL 都會導致問題。對於FallBackResource index.html特定的目錄樹,index.html 必須始終存在,否則您將獲得為index.html無法找到的請求描述的遞歸循環。

在您的情況下,您需要一個帶有 , 的頂級.htaccess文件FallBackResource /index.html,然後FallBackResource /subfoldername/index.html在每個相關的子文件夾中。

生成這些的簡單腳本可能是最安全的。

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