2024年PHP开发者大会日本站

Apache 函数

目录

添加注释

用户贡献注释 5条注释

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

在``块内使用时,`php_flag`指令在Apache 2下的行为似乎与1.3下有所不同。

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

这是一个例子

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

当您运行服务器时,您会注意到magic_quotes在V2中(有时)设置为On!
当之前有对V1的请求时,V2的值变为On。

要解决此问题,请将`php_flag`移动到位于自定义虚拟主机目录中的`.htaccess`文件中,或者将具有默认设置的`php_flag`放入所有未自定义的``块中。因此,对于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
22年前
当有人输入类似这样的URI时,我的Apache服务器出现问题:“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
19年前
这是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
19年前
致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