1

我正在开发一个在 Processwire 上运行的客户网站。我正在尝试在任何processwire 东西之外设置一个常规的 ol' PHP 页面,这些东西可以像提供的普通 PHP 页面一样执行。

假设我正在尝试在页面“bar.php”具有以下代码的根目录下设置“/foo/bar.php”:

foo/bar.php

<?php

    echo "Hello World";

?>

据推测,如果我访问example.com/foo/bar.php,服务器会看到该资源存在并通过在浏览器中向用户显示“Hello World”来提供内容。但是,我收到一个 404 错误,将我带到 PW 404 页面。

在根目录的 .htaccess 文件中,我看到了这个:

  # -----------------------------------------------------------------------------------------------
  # 17. If the request is for a file or directory that physically exists on the server,
  # then don't give control to ProcessWire, and instead load the file
  # -----------------------------------------------------------------------------------------------

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !(favicon\.ico|robots\.txt)

我不能正确理解这一点,因为实际的 bar.php 文件确实存在......但它不起作用。但是,如果我将 bar.php 的扩展名更改为bar.txt文件确实会加载example.com/foo/bar.txt(显示上面显示的 PHP 代码)。

那么,如何调整或更新 .htaccess 以告诉 PW 忽略 /foo 下的任何内容(包括递归的文件和文件夹),以免被 PW 处理?

4

1 回答 1

1

你不应该做任何事情。正如您所建议的那样,这些指令(尽管不完整且不完全正确)应该已经排除了对任何物理文件(和目录)的请求。更可能的问题是如何在您的服务器上处理/处理 PHP 文件(CGI/反向代理?!),然后文件系统检查由于某种原因而失败。

作为一种解决方法,您可以为这个为您的 PHP 文件提供服务的子目录设置一个特定的异常。这可以通过几种方式实现......例如:

  • 在您发布的条件列表中首先包含另一个条件:

    RewriteCond %{REQUEST_URI} !^/foo/
    

或者

  • 在文件顶部包含一个异常,以.htaccess防止在请求此目录时(或者更确切地说,当/foo/请求启动的 URL 路径时)处理任何进一步的 mod_rewrite 指令。

    RewriteRule ^foo(/|$) - [L]
    

或者

  • 在禁用(或启用)重写引擎.htaccess的子目录中创建另一个。/foo默认情况下不继承 mod_rewrite 指令,因此这完全覆盖了父.htaccess文件中的 mod_rewrite 指令。

    RewriteEngine Off
    
于 2021-03-25T15:03:39.380 回答