mirror of
https://github.com/apache/httpd.git
synced 2025-06-01 23:21:45 +03:00
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@102714 13f79535-47bb-0310-9956-ffa450edef68
115 lines
6.9 KiB
XML
115 lines
6.9 KiB
XML
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
|
|
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
This file is generated from xml source: DO NOT EDIT
|
|
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
-->
|
|
<title>PATH_INFO Changes in the CGI Environment - Apache HTTP Server</title>
|
|
<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
|
|
<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
|
|
<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
|
|
<link href="./images/favicon.ico" rel="shortcut icon" /></head>
|
|
<body id="manual-page"><div id="page-header">
|
|
<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
|
|
<p class="apache">Apache HTTP Server Version 2.1</p>
|
|
<img alt="" src="./images/feather.gif" /></div>
|
|
<div class="up"><a href="./"><img title="<-" alt="<-" src="./images/left.gif" /></a></div>
|
|
<div id="path">
|
|
<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs-project/">Documentation</a> > <a href="./">Version 2.1</a></div><div id="page-content"><div id="preamble"><h1>PATH_INFO Changes in the CGI Environment</h1>
|
|
<div class="toplang">
|
|
<p><span>Available Languages: </span><a href="./en/cgi_path.html" title="English"> en </a> |
|
|
<a href="./ja/cgi_path.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
|
|
<a href="./ko/cgi_path.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>
|
|
</div>
|
|
|
|
<p>As implemented in Apache 1.1.1 and earlier versions, the
|
|
method Apache used to create PATH_INFO in the CGI environment
|
|
was counterintuitive, and could result in crashes in certain
|
|
cases. In Apache 1.2 and beyond, this behavior has changed.
|
|
Although this results in some compatibility problems with
|
|
certain legacy CGI applications, the Apache 1.2 behavior is
|
|
still compatible with the CGI/1.1 specification, and CGI
|
|
scripts can be easily modified (<a href="#compat">see
|
|
below</a>).</p>
|
|
</div>
|
|
<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#prob">The Problem</a></li>
|
|
<li><img alt="" src="./images/down.gif" /> <a href="#solution">The Solution</a></li>
|
|
<li><img alt="" src="./images/down.gif" /> <a href="#compat">Compatibility with Previous Servers</a></li>
|
|
</ul></div>
|
|
<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
|
|
<div class="section">
|
|
<h2><a name="prob" id="prob">The Problem</a></h2>
|
|
<p>Apache 1.1.1 and earlier implemented the PATH_INFO and
|
|
SCRIPT_NAME environment variables by looking at the filename,
|
|
not the URL. While this resulted in the correct values in many
|
|
cases, when the filesystem path was overloaded to contain path
|
|
information, it could result in errant behavior. For example,
|
|
if the following appeared in a config file:</p>
|
|
|
|
<div class="example"><p><code>
|
|
Alias /cgi-ralph /usr/local/httpd/cgi-bin/user.cgi/ralph
|
|
</code></p></div>
|
|
|
|
<p>In this case, <code>user.cgi</code> is the CGI script, the
|
|
"/ralph" is information to be passed onto the CGI. If this
|
|
configuration was in place, and a request came for
|
|
"<code>/cgi-ralph/script/</code>", the code would set PATH_INFO
|
|
to "<code>/ralph/script</code>", and SCRIPT_NAME to
|
|
"<code>/cgi-</code>". Obviously, the latter is incorrect. In
|
|
certain cases, this could even cause the server to crash.</p>
|
|
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
|
|
<div class="section">
|
|
<h2><a name="solution" id="solution">The Solution</a></h2>
|
|
<p>Apache 1.2 and later now determine SCRIPT_NAME and PATH_INFO
|
|
by looking directly at the URL, and determining how much of the
|
|
URL is client-modifiable, and setting PATH_INFO to it. To use
|
|
the above example, PATH_INFO would be set to
|
|
"<code>/script</code>", and SCRIPT_NAME to
|
|
"<code>/cgi-ralph</code>". This makes sense and results in no
|
|
server behavior problems. It also permits the script to be
|
|
guaranteed that
|
|
"<code>http://$SERVER_NAME:$SERVER_PORT$SCRIPT_NAME$PATH_INFO</code>"
|
|
will always be an accessible URL that points to the current
|
|
script, something which was not necessarily true with previous
|
|
versions of Apache.</p>
|
|
|
|
<p>However, the "<code>/ralph</code>" information from the
|
|
<code>Alias</code> directive is lost. This is unfortunate, but
|
|
we feel that using the filesystem to pass along this sort of
|
|
information is not a recommended method, and a script making
|
|
use of it "deserves" not to work. Apache 1.2b3 and later,
|
|
however, do provide <a href="#compat">a workaround.</a></p>
|
|
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
|
|
<div class="section">
|
|
<h2><a name="compat" id="compat">Compatibility with Previous Servers</a></h2>
|
|
|
|
|
|
<p>It may be necessary for a script that was designed for
|
|
earlier versions of Apache or other servers to need the
|
|
information that the old PATH_INFO variable provided. For this
|
|
purpose, Apache 1.2 (1.2b3 and later) sets an additional
|
|
variable, FILEPATH_INFO. This environment variable contains the
|
|
value that PATH_INFO would have had with Apache 1.1.1.</p>
|
|
|
|
<p>A script that wishes to work with both Apache 1.2 and
|
|
earlier versions can simply test for the existence of
|
|
FILEPATH_INFO, and use it if available. Otherwise, it can use
|
|
PATH_INFO. For example, in Perl, one might use:</p>
|
|
|
|
<div class="example"><p><code>
|
|
$path_info = $ENV{'FILEPATH_INFO'} || $ENV{'PATH_INFO'};
|
|
</code></p></div>
|
|
|
|
<p>By doing this, a script can work with all servers supporting
|
|
the CGI/1.1 specification, including all versions of
|
|
Apache.</p>
|
|
</div></div>
|
|
<div class="bottomlang">
|
|
<p><span>Available Languages: </span><a href="./en/cgi_path.html" title="English"> en </a> |
|
|
<a href="./ja/cgi_path.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
|
|
<a href="./ko/cgi_path.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>
|
|
</div><div id="footer">
|
|
<p class="apache">Copyright 1999-2004 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
|
|
<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
|
|
</body></html> |