簡體   English   中英

Apache FallbackResource 配置

[英]Apache FallbackResource Configuration

我正在嘗試使用 Apache Web 服務器 (v2.4) 將 PHP 應用程序從 Windows IIS 移植到 Linux (Debian)。 我成功地將我的 Document Root 更改為/code/wwwroot ,並且正在使用配置文件/etc/apache2/sites-available/000-default.conf而不是.htaccess進行配置(在 Apache 2.4 文檔中它說使用/etc/apache2/sites-available配置文件,如果您有權訪問服務器配置文件,我這樣做)。 這是我用於我的配置:

    <VirtualHost *:80>
      ServerAdmin webmaster@localhost
      DocumentRoot /code/wwwroot
      <Directory /code/wwwroot>
        Options Indexes FollowSymLinks
        AllowOverride None
        FallbackResource /start.php
      </Directory>
      CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>

這幾乎完全符合我的預期。 當在/code/wwwroot/中找到的文件被請求時,它們被提供。 如果請求的文件/路徑不存在,則運行並返回start.php 例如,如果我的請求是localhost/gadgasd.html等,它會在內部重定向到start.php 但是,對於 Document Root 中不存在的具有.php擴展名的文件,我得到了 404。 例如,如果請求是localhost/gadgasd.php ,我會直接從 Apache 獲得 404(我希望在我的代碼中而不是 Apache 中處理 404)。 此行為嚴格限於文檔根目錄中不存在的具有.php擴展名的文件。 我對這種行為感到非常困惑。 我已經設置了將 php 與 apache 一起使用的正確包( apt-get install -y php libapache2-mod-php ),並且FallbackResource規則適用於所有其他文件擴展名。 我究竟做錯了什么? 提前致謝!

這似乎是 Apache 中的一個錯誤,這里有一個開放的問題跟蹤器。 還提供了一種解決方法。

編輯:如果鏈接失效,解決方法是使用舊的mod_rewrite方法,如下所示:

RewriteEngine On
RewriteCond /var/www/%{REQUEST_FILENAME} !-f
RewriteCond /var/www/%{REQUEST_FILENAME} !-d
RewriteRule (.*) start.php

問題來自這樣一個事實,即默認的 mod_php 配置( /etc/apache2/mods-enabled/phpX.conf )在將請求傳遞給 PHP 處理程序之前似乎沒有檢查文件是否存在。 這可以通過更改輕松添加:

<FilesMatch ".+\.ph(ar|p|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>

<FilesMatch ".+\.ph(ar|p|tml)$">
    <If "-f %{REQUEST_FILENAME}">
        SetHandler application/x-httpd-php
    </If>
</FilesMatch>

<FilesMatch/>似乎不會像您預期的那樣檢查文件是否存在,這意味着所有以.php.phtml.phar結尾的請求都被盲目地傳遞給 php 處理程序。

值得注意的是,這可能會對性能產生影響,因為 Apache 必須檢查磁盤是否存在文件,但我推測幾乎在所有情況下差異都可以忽略不計。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM