【发布时间】:2014-03-05 15:02:51
【问题描述】:
- 带有值
'44'的$_SERVER['REDIRECT_STATUS']是什么意思? - 为什么
$_SERVER['REDIRECT_URL']会有"/500.shtml"值? - 我没有使用 mod_rewrite 进行外部重定向,但
$_SERVER有两个不同的 REQUEST_METHOD 值(POST 和 GET);就像我发出一个 POST 请求然后被重定向为一个 GET 请求一样。这里发生了什么?
我使用http://blog.iosart.com/2004/05/26/fooling-apache/中描述的方法,根据%{HTTP_HOST}的值设置了一些环境变量,然后在多个PHP应用程序之间多路复用。
当使用multipart/form-data POST 请求寻找错误时,我发现 PHP 正在从 Superglobals 获取这些值:
$_SERVER=array
(
'CONTENT_LENGTH' => '1660'
'CONTENT_TYPE' => 'multipart/form-data; boundary=----------------------------7e789ef7ac774b7689c602d8f67446dd'
'CONTEXT_DOCUMENT_ROOT' => '/home/myphpapp/public_html'
'CONTEXT_PREFIX' => ''
'DOCUMENT_ROOT' => '/home/myphpapp/public_html'
'GATEWAY_INTERFACE' => 'CGI/1.1'
'HTTP_ACCEPT' => '*/*'
'HTTP_ACCEPT_ENCODING' => 'gzip, deflate'
'HTTP_CONNECTION' => 'keep-alive'
'HTTP_HOST' => 'api.myphpapp.com'
'HTTP_USER_AGENT' => 'Dalvik/1.6.0 (Linux; U; Android 4.4.2; Android SDK built for x86 Build/KK)'
'HTTP_X_TOKEN' => 'prod'
'MY_HTTP_HOST' => 'api.myphpapp.com'
'PATH' => '/bin:/usr/bin'
'QUERY_STRING' => ''
'REDIRECT_MY_HTTP_HOST' => 'api.myphpapp.com'
'REDIRECT_REDIRECT_REQUEST_METHOD' => 'POST'
'REDIRECT_REDIRECT_STATUS' => '44'
'REDIRECT_REDIRECT_UNIQUE_ID' => 'UxZd4zIcVQUAAFwqGD8AAAAG'
'REDIRECT_STATUS' => '44'
'REDIRECT_UNIQUE_ID' => 'UxZd4zIcVQUAAFwqGD8AAAAG'
'REDIRECT_URL' => '/500.shtml'
'REDIRECT_APP_SET' => 'api'
'REDIRECT_APP_MODE' => 'production'
'REMOTE_ADDR' => '100.101.102.103'
'REMOTE_PORT' => '65446'
'REQUEST_METHOD' => 'GET'
'REQUEST_SCHEME' => 'http'
'REQUEST_URI' => '/v1/2/controller/action'
'SCRIPT_FILENAME' => '/home/myphpapp/public_html/index.php'
'SCRIPT_NAME' => '/index.php'
'SERVER_ADDR' => '50.51.52.53'
'SERVER_ADMIN' => 'webmaster@myphpapp.com'
'SERVER_NAME' => 'api.myphpapp.com'
'SERVER_PORT' => '80'
'SERVER_PROTOCOL' => 'HTTP/1.1'
'SERVER_SIGNATURE' => ''
'SERVER_SOFTWARE' => 'Apache'
'UNIQUE_ID' => 'UxZd4zIcVQUAAFwqGD8AAAAG'
'APP_SET' => 'api'
'APP_MODE' => 'production'
'PHP_SELF' => '/index.php'
'REQUEST_TIME_FLOAT' => 1393974756.09
'REQUEST_TIME' => 1393974756
'argv' => array()
'argc' => 0
)
我的(简化的).htaccess 是:
FileETag None
Options -Indexes
Options +FollowSymLinks
RewriteEngine On
#Vary Host cheat http://blog.iosart.com/2004/05/26/fooling-apache/
RewriteRule .* - [E=MY_HTTP_HOST:%{HTTP_HOST}]
RewriteCond %{ENV:MY_HTTP_HOST} ^myphpapp\.com$ [NC]
RewriteRule ^(.*)$ http://www.myphpapp.com/$1 [R=301,L]
RewriteRule ^ - [E=APP_MODE:production]
RewriteRule ^ - [E=APP_SET:none]
RewriteCond %{ENV:MY_HTTP_HOST} ^www\.myphpapp\.com$ [NC]
RewriteRule ^ - [E=APP_SET:home] []
RewriteCond %{ENV:MY_HTTP_HOST} ^api\.myphpapp\.com$ [NC]
RewriteRule ^ - [E=APP_SET:api]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
我正在运行 Apache 2.4.7 & PHP 5.4.25 & index.php 是 Yii 1.1.14 应用程序
【问题讨论】:
标签: php apache .htaccess mod-rewrite redirect