【问题标题】:Apache FallbackResource ConfigurationApache Fallback资源配置
【发布时间】:2018-10-30 14:03:39
【问题描述】:

我正在尝试使用 Apache Web 服务器 (v2.4) 将 PHP 应用程序从 Windows IIS 移植到 Linux (Debian)。我成功地将我的文档根更改为/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。但是,对于文档根目录中不存在的具有.php 扩展名的文件,我得到的是 404。例如,如果请求是localhost/gadgasd.php,我会直接从 Apache 获得 404(我希望在我的代码中而不是 Apache 中处理 404)。此行为仅限于具有 .php 扩展名且在 Document Root 中不存在的文件。我对这种行为感到非常困惑。我已经设置了正确的包以将 php 与 apache (apt-get install -y php libapache2-mod-php) 一起使用,FallbackResource 规则适用于所有其他文件扩展名。我究竟做错了什么?提前致谢!

【问题讨论】:

    标签: php linux apache php-7 apache2.4


    【解决方案1】:

    这似乎是 Apache 中的一个错误,并且有一个未解决的问题跟踪器 here。还提供了一种解决方法。

    编辑:如果链接失效,解决方法是使用旧的mod_rewrite 方法,如下所示:

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

    【讨论】:

      【解决方案2】:

      问题在于默认的 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>
      

      &lt;FilesMatch/&gt; 似乎并没有像您预期的那样检查文件是否存在,这意味着所有以 .php.phtml.phar 结尾的请求都被盲目地传递给 php 处理程序。

      值得注意的是,这可能会对性能产生影响,因为 Apache 必须检查磁盘是否存在文件,但我推测在几乎所有情况下差异都可以忽略不计。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多