Apache 函数

目录

添加注释

用户贡献的注释 5 个注释

outofnet at mail dot ru
19 年前
对于具有多个虚拟主机的 Apache2 用户的重要信息。

似乎 php_flag 指令在 Apache 2 下的行为与在 1.3 下的行为不同,当在 <VirtualHost> 块中使用时。

如果您使用 php_flag 覆盖一个虚拟主机的全局 php.ini 设置,那么其他未定制的虚拟主机也可能使用此覆盖设置。php_flag 记录在单个 Apache 2 服务器上的不同虚拟主机之间是混乱的。这可能是由于 Apache 2 多线程特性导致的。

以下是一个示例

假设您有两个虚拟主机:V1 和 V2。
对于 Apache 配置中的 V1,您使用
php_flag magic_quotes_gpc 1
V2 应该使用全局 php.ini 设置,因此您没有将任何 php_flag 记录放入 Apache 配置文件中的 V2(这在 Apache 1.3 下有效)。
而您的默认 php.ini 设置是
php_flag magic_quotes_gpc 0

当您运行服务器时,您会注意到 magic quotes 在 V2 上(有时)被设置为 On!
当对 V1 有先前的请求时,V2 上的值将变为 On。

要解决此问题,要么将 php_flag 移到位于自定义虚拟主机目录中的 .htaccess 文件中,要么将具有默认设置的 php_flag 放入所有未定制的 <VirtualHost> 块中。因此,对于 V2,请放入
php_flag magic_quotes_gpc 0

请务必非常小心使用 php_flag engine 0。

我的配置是
PHP 4.3.4、Apache 2.0.50、Linux RedHat 9
henk_nicolai at REMOVE-THIS at hotmail dot com
21 年前
我的 Apache 服务器在有人输入类似这样的 URI 时遇到问题:"http://my_server.nl/index.php/"。(注意额外的斜杠)。服务器无论如何都会执行 index.php 脚本,这会导致浏览器目录和脚本中使用的当前目录不同。因此,我的相对链接不起作用,并且我的样式表没有加载。快速测试("https://php.net/manual/en/index.php/")表明这个网站也存在这种故障。

当客户请求没有最后一个斜杠的目录("https://php.net/manual")时,服务器会发送一个 HTTP 301(永久移动)响应,并重定向到正确的 URI("https://php.net/manual/"),我的想法是当用户添加过多的斜杠时也做同样的事情。

<?php
$req
= $_SERVER['REQUEST_URI'];
// 删除垃圾。
$newReq = ereg_replace ('index.php[^?]*', 'index.php', $req);
if (
strlen($newReq) < strlen($req)) {
header ('Location: '.$newReq);
header ('HTTP/1.0 301 Moved Permanently');
die;
// 不要发送任何更多输出。
}
unset(
$req); unset($newReq);

... (
脚本的其余部分) ...
?>

将所有出现的 'index.php' 替换为您的文件名,您就完成了。希望对您有帮助。:-)

(注意:我在 URI 中不使用片段(如 'index.php#bottom'),如果您使用它们,此代码可能无法按预期工作。)
cjm2 at earthling dot net
22 年前
如果您尝试为 apache 的 mod_mime 函数找到一个要使用的处理程序(例如 SetHandler),请使用与 php 关联的 MIME 类型。

例如,SetHandler application/x-httpd-php
bgshea at gmail dot com
18 年前
以下是 henk_nicolai at REMOVE-THIS at hotmail dot com 代码的动态版本

$req = $_SERVER['REQUEST_URI'];
// 删除垃圾。
$newReq = ereg_replace ( $_SERVER['SCRIPT_NAME'] . '[^?]*', $_SERVER['SCRIPT_NAME'], $req);
if (strlen($newReq) < strlen($req))
{
header ('Location: '.$newReq);
header ('HTTP/1.0 301 Moved Permanently');
die; // 不要发送任何更多输出。
}
unset($req);
unset($newReq);

这可以放在任何将通过 URI 访问的文件的顶部。
pike
18 年前
给 henk_nicolai

您描述的行为不是 apache 的“故障”。:-) 一个像
"http://my_server.nl/index.php/foo" 这样的 URL 应该返回资源 http://my_server.nl/index.php 并在环境中将 "/foo" 作为 PATH_INFO 传递。

如果您明智地使用它,这将非常有用。

有关 PATH_INFO 和 PATH_TRANSLATED 的更多信息,请参阅 http://nl2.php.net/reserved.variables 。PATH_INFO 与 php pathinfo() 函数无关

$2c,
*pike
To Top