该站点的根目录中有一个文件.htaccess,其中列出了以下重定向:
RewriteRule ^([a-z]*)\/([1-9][0-9]*\/)?([a-z]*|[1-9][0-9]*\/)*$ index.php?page=$1&id=$2 [NC]
RewriteRule ([^\/]*)\.js$ public/scripts/$1.js [L]
HTML 完美地考虑了它们,即位于的脚本public/scripts/从站点的任何页面连接如下:
<script type="text/javascript" src="jquery-3.1.1.min.js"></script>
<script type="text/javascript" src="ion.sound.min.js"></script>
<script type="text/javascript" src="illtree.js"></script>
这是以下 PHP 代码:
require_once "script.js";
它认为这是一条在与插入的目录相同的目录中查找文件的指令,但在那里找不到任何东西,当然,这就是为什么需要将文件的绝对路径传递给函数的原因:
require_once $_SERVER['DOCUMENT_ROOT']."/public/scripts/script.js";
从体系结构的角度来看,这不是很方便:如果出于某种原因,我想将脚本移动到另一个位置,我将需要在几个地方编辑路径,而不仅仅是更新.htaccess. 是否有可能以某种方式改变这种行为以.htaccess重定向来自 php 脚本的请求?
PHP 直接访问本地文件,而不是通过服务器,服务器负责将请求重定向到
.htaccess. 但是,从 PHP 4.3.0 开始,您还可以使用函数请求远程文件require,include将 url 作为参数传递,如下所示:要使此类调用起作用,必须在服务器的 PHP 设置(参数
allow_url_include和allow_url_fopen)中启用此行为。但是,应该记住,配置中的此类更改会降低服务器的安全性,因此应该避免。第二种方法是包含包含要包含在 PHP 设置指令中的文件的目录
include_path,或者使用该函数set_include_path()在当前脚本的持续时间内更改此设置 - 例如,将其添加到站点上所有文件包含的配置中。