Php
mod_rewrite 規則被繞過,.phtml 文件顯示為純文字
我有一個舊項目的問題,我有以下 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]