Php

mod_rewrite 規則被繞過,.phtml 文件顯示為純文字

  • December 9, 2011

我有一個舊項目的問題,我有以下 mod_rewrite 條件/規則:

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

但是**.phtml**文件在瀏覽器中被呈現為純文字。

問題是我在公共目錄中有一些 .phtml 文件與第一個重寫條件**“-s”匹配(是正常文件,有大小),因此它們沒有被發送到 index.php。事實上,.phtml 文件顯示為純文字!**我需要將這些文件保留在那裡,因此我無法deny from all為該目錄進行設置,因為它還包含一些圖像和內容。

我試過這個:

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
RewriteRule \.phtml$ index.php [NC,L]

但它不起作用,因為它已經滿足了第一個重寫條件,所以應用了第一條規則(什麼都不做)。

我怎樣才能解決這個問題?

我認為該規則和 .htaccess 不是這裡的條件。您應該使用 php 配置 apache tu 使用 phtml 文件:

AddType application/x-httpd-php .php .phtml .html

然後規則

RewriteRule \.phtml$ index.php [NC,L]

可以省略它應該可以工作,因為文件存在並且有大小,所以 apache 應該像處理任何其他 PHP 文件一樣處理它。

編輯: 如果你根本不想提供 .phtml 文件,你可以像這樣使用重寫:

RewriteCond %{REQUEST_FILENAME} \.phtml$
RewriteRule ^.*$ index.php [NC,L]

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

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