here is a dynamic version of henk_nicolai at REMOVE-THIS at hotmail dot com's code
$req = $_SERVER['REQUEST_URI'];
// Remove rubbish.
$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; // Don't send any more output.
}
unset($req);
unset($newReq);
this can be placed at the top of any file that is to be access by the URI.
II. Funkce specifické pro Apache
Úvod
Tyto funkce jsou k dispozici pouze pokud PHP běží jako modul Apache 1.x.
Instalace
Instalaci PHP v Apache 1.x viz část Apache kapitoly o instalaci.
Konfigurace běhu
The behaviour of the Apache PHP module is affected by settings in php.ini. Configuration settings from php.ini may be overridden by php_flag settings in the server configuration file or local .htaccess files.
Tabulka 11. Apache configuration options
| Name | Default | Changeable | Changelog |
|---|---|---|---|
| engine | "1" | PHP_INI_ALL | Available since PHP 4.0.5. |
| child_terminate | "0" | PHP_INI_ALL | Available since PHP 4.0.5. |
| last_modified | "0" | PHP_INI_ALL | Available since PHP 4.0.5. |
| xbithack | "0" | PHP_INI_ALL | Available since PHP 4.0.5. |
Pro další detaily a definice konstant PHP_INI_*, viz dokumentace k ini_set().
Zde je stručný popis konfiguračních direktiv.
- engine boolean
Turns PHP parsing on or off. This directive is really only useful in the Apache module version of PHP. It is used by sites that would like to turn PHP parsing on and off on a per-directory or per-virtual server basis. By putting
engine offin the appropriate places in the httpd.conf file, PHP can be enabled or disabled.- child_terminate boolean
Specify whether PHP scripts may request child process termination on end of request, see also apache_child_terminate().
- last_modified boolean
Send PHP scripts modification date as Last-Modified: header for this request.
- xbithack boolean
Parse files with executable bit set as PHP regardless of their file ending.
Typy prostředků
Toto rozšíření nemá definován žádný typ prostředku (resource).
Předdefinované konstanty
Toto rozšíření nemá definovány žádné konstanty.
Obsah
- apache_child_terminate — Terminate apache process after this request
- apache_get_modules — Get a list of loaded Apache modules
- apache_get_version — Fetch Apache version
- apache_getenv — Get an Apache subprocess_env variable
- apache_lookup_uri — Provádí částečný požadavek na zadanou URI a vrací všechno info o ní
- apache_note — Získává a nastavuje poznámky požadavku u Apache.
- apache_request_headers — Fetch all HTTP request headers
- apache_reset_timeout — Reset the Apache write timer
- apache_response_headers — Fetch all HTTP response headers
- apache_setenv — Set an Apache subprocess_env variable
- ascii2ebcdic — Překládá řetězec z ASCII do EBCDIC
- ebcdic2ascii — Překládá řetězec z EBCDIC do ASCII
- getallheaders — Získává všechny hlavičky HTTP požadavku
- virtual — Provádí sub-požadavek Apache
Funkce specifické pro Apache
28-Nov-2005 07:41
01-Nov-2005 03:16
to henk_nicolai
the behaviour you describe is not a "glitch" of apache :-). an url like
"http://my_server.nl/index.php/foo". should return the resource http://my_server.nl/index.php and pass "/foo" as PATH_INFO in the environment.
which is extremely usefull if you use it wisely.
for more info on PATH_INFO and PATH_TRANSLATED, see http://nl2.php.net/reserved.variables . PATH_INFO is not related to the php pathinfo() function
$2c,
*pike
27-Aug-2004 07:44
Important info for Apache2 users that have several virtual hosts.
It seems php_flag directive has a different behaviour under Apache 2 (from what it is under 1.3) when used inside <VirtualHost> block.
If you override global php.ini settings with php_flag for one of your virtual host - then your other non-customized virtual hosts may use this overrided settings as well. php_flag records are messed up among different virtual hosts under single Apache 2 server. It may result from Apache 2 multi-thread nature.
Here is an example:
Suppose you have two Virtual hosts: V1 and V2.
For V1 in Apache configuration you use
php_flag magic_quotes_gpc 1
V2 is supposed to use global php.ini settings, so you didn't put any php_flag records into Apache conf for V2 (this worked under Apache 1.3).
And your default php.ini settings are:
php_flag magic_quotes_gpc 0
When you run your server you'll notice that magic quotes is (sometimes) set to On at V2!
The value turns On at V2 when there have been a previous request to V1.
To solve the problem either move php_flag into .htaccess located inside customized virtual host directory OR put php_flag with default settings into all your <VirtualHost> blocks that are not customized. So for V2 put:
php_flag magic_quotes_gpc 0
It is critical to be very carefull with php_flag engine 0.
My configuration is:
PHP 4.3.4, Apache 2.0.50, Linux RedHat 9
20-Nov-2002 04:03
My Apache server has a problem when someone enters a URI like: "http://my_server.nl/index.php/". (Note the extra slash.) The server executes the index.php script anyway, which causes the browser directory and the current directory used in the script to be different. And therefore my relative links don't work, and my stylesheet is not loaded. A quick test ("http://www.php.net/manual/en/index.php/") reveals that also this site has this glitch.
When a client requests a directory without the last slash ("http://www.php.net/manual") the server sends a HTTP 301 (Moved Permanently) response with a redirect to the correct URI ("http://www.php.net/manual/"), and my idea was to do the same when the user adds a slash too much:
<?php
$req = $_SERVER['REQUEST_URI'];
// Remove rubbish.
$newReq = ereg_replace ('index.php[^?]*', 'index.php', $req);
if (strlen($newReq) < strlen($req)) {
header ('Location: '.$newReq);
header ('HTTP/1.0 301 Moved Permanently');
die; // Don't send any more output.
}
unset($req); unset($newReq);
... (rest of the script) ...
?>
Replace every occurence of 'index.php' with your filename and you're done. Hope it helps. :-)
(Note: I'm not using fragments in my URI's (like 'index.php#bottom'), and this code may not do what you want if you are using them.)
10-Jan-2002 03:40
If you are trying to find a Handler to use with apache's mod_mime functions (e.g. SetHandler). Use the MIME type associated with php.
e.g. SetHandler application/x-httpd-php
25-Mar-2000 03:12
Many of the environment variables can be found here:
http://www.php.net/manual/language.variables.predefined.php
