Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 不同的行为_Php_Apache_.htaccess - Fatal编程技术网

Php 不同的行为

Php 不同的行为,php,apache,.htaccess,Php,Apache,.htaccess,我正在使用以下htaccess: RewriteEngine on RewriteBase / # If the request is for a valid file RewriteCond %{REQUEST_FILENAME} -f [OR] # If the request is for a valid link RewriteCond %{REQUEST_FILENAME} -l # don't do anything RewriteRule ^ - [L] # if curre

我正在使用以下htaccess:

RewriteEngine on

RewriteBase /

# If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f [OR]
# If the request is for a valid link
RewriteCond %{REQUEST_FILENAME} -l
# don't do anything
RewriteRule ^ - [L]

# if current ${REQUEST_URI}.php is not a file then
# forward to the parent directory of current REQUEST_URI
RewriteCond %{DOCUMENT_ROOT}/$1/$2.php !-f
RewriteRule ^(.*?)/([^/]+)/?$ $1/?param[]=$2 [L,QSA]

# if current ${REQUEST_URI}.php is a valid file then
# load it be removing optional trailing slash
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*?)/?$ $1.php [L]
从这里的问题

但是在我的本地机器上它工作得很好,但是在我的服务器上它根本不工作,并且有不同的环境变量

在本地服务器上,我在$\u服务器变量中有几个REDIRECT\u REDIRECT\u变量,在服务器上,我有“PATH\u TRANSLATED”,没有任何形式的REDIRECT\u

在我的本地服务器上,我会得到一个名为“param”的get,其中包含“folder”名称,直到找到一个有效的文件,但在我的服务器上,我没有得到类似的文件

本地版本:

Apache/2.4.2
PHP 5.4.4
Apache/2.2.22 (Ubuntu)
PHP 5.3.10-1ubuntu3.8
服务器版本:

Apache/2.4.2
PHP 5.4.4
Apache/2.2.22 (Ubuntu)
PHP 5.3.10-1ubuntu3.8
为了达到同样的结果,我必须改变什么

Localhost

  'server' => 
    array (size=78)
      'REDIRECT_REDIRECT_REDIRECT_REDIRECT_REDIRECT_MIBDIRS' => string '/xampp/php/extras/mibs' (length=22)
      'REDIRECT_REDIRECT_REDIRECT_REDIRECT_REDIRECT_MYSQL_HOME' => string '\xampp\mysql\bin' (length=16)
      'REDIRECT_REDIRECT_REDIRECT_REDIRECT_REDIRECT_OPENSSL_CONF' => string '/xampp/apache/bin/openssl.cnf' (length=29)
      'REDIRECT_REDIRECT_REDIRECT_REDIRECT_REDIRECT_PHP_PEAR_SYSCONF_DIR' => string '\xampp\php' (length=10)
      'REDIRECT_REDIRECT_REDIRECT_REDIRECT_REDIRECT_PHPRC' => string '\xampp\php' (length=10)
      'REDIRECT_REDIRECT_REDIRECT_REDIRECT_REDIRECT_TMP' => string '\xampp\tmp' (length=10)
      'REDIRECT_REDIRECT_REDIRECT_REDIRECT_REDIRECT_STATUS' => string '200' (length=3)
      'REDIRECT_REDIRECT_REDIRECT_REDIRECT_MIBDIRS' => string '/xampp/php/extras/mibs' (length=22)
      'REDIRECT_REDIRECT_REDIRECT_REDIRECT_MYSQL_HOME' => string '\xampp\mysql\bin' (length=16)
      'REDIRECT_REDIRECT_REDIRECT_REDIRECT_OPENSSL_CONF' => string '/xampp/apache/bin/openssl.cnf' (length=29)
      'REDIRECT_REDIRECT_REDIRECT_REDIRECT_PHP_PEAR_SYSCONF_DIR' => string '\xampp\php' (length=10)
      'REDIRECT_REDIRECT_REDIRECT_REDIRECT_PHPRC' => string '\xampp\php' (length=10)
      'REDIRECT_REDIRECT_REDIRECT_REDIRECT_TMP' => string '\xampp\tmp' (length=10)
      'REDIRECT_REDIRECT_REDIRECT_REDIRECT_STATUS' => string '200' (length=3)
      'REDIRECT_REDIRECT_REDIRECT_MIBDIRS' => string '/xampp/php/extras/mibs' (length=22)
      'REDIRECT_REDIRECT_REDIRECT_MYSQL_HOME' => string '\xampp\mysql\bin' (length=16)
      'REDIRECT_REDIRECT_REDIRECT_OPENSSL_CONF' => string '/xampp/apache/bin/openssl.cnf' (length=29)
      'REDIRECT_REDIRECT_REDIRECT_PHP_PEAR_SYSCONF_DIR' => string '\xampp\php' (length=10)
      'REDIRECT_REDIRECT_REDIRECT_PHPRC' => string '\xampp\php' (length=10)
      'REDIRECT_REDIRECT_REDIRECT_TMP' => string '\xampp\tmp' (length=10)
      'REDIRECT_REDIRECT_REDIRECT_STATUS' => string '200' (length=3)
      'REDIRECT_REDIRECT_MIBDIRS' => string '/xampp/php/extras/mibs' (length=22)
      'REDIRECT_REDIRECT_MYSQL_HOME' => string '\xampp\mysql\bin' (length=16)
      'REDIRECT_REDIRECT_OPENSSL_CONF' => string '/xampp/apache/bin/openssl.cnf' (length=29)
      'REDIRECT_REDIRECT_PHP_PEAR_SYSCONF_DIR' => string '\xampp\php' (length=10)
      'REDIRECT_REDIRECT_PHPRC' => string '\xampp\php' (length=10)
      'REDIRECT_REDIRECT_TMP' => string '\xampp\tmp' (length=10)
      'REDIRECT_REDIRECT_STATUS' => string '200' (length=3)
      'REDIRECT_MIBDIRS' => string '/xampp/php/extras/mibs' (length=22)
      'REDIRECT_MYSQL_HOME' => string '\xampp\mysql\bin' (length=16)
      'REDIRECT_OPENSSL_CONF' => string '/xampp/apache/bin/openssl.cnf' (length=29)
      'REDIRECT_PHP_PEAR_SYSCONF_DIR' => string '\xampp\php' (length=10)
      'REDIRECT_PHPRC' => string '\xampp\php' (length=10)
      'REDIRECT_TMP' => string '\xampp\tmp' (length=10)
      'REDIRECT_STATUS' => string '200' (length=3)
      'MIBDIRS' => string '/xampp/php/extras/mibs' (length=22)
      'MYSQL_HOME' => string '\xampp\mysql\bin' (length=16)
      'OPENSSL_CONF' => string '/xampp/apache/bin/openssl.cnf' (length=29)
      'PHP_PEAR_SYSCONF_DIR' => string '\xampp\php' (length=10)
      'PHPRC' => string '\xampp\php' (length=10)
      'TMP' => string '\xampp\tmp' (length=10)
      'HTTP_HOST' => string 'site.dev' (length=13)
      'HTTP_CONNECTION' => string 'keep-alive' (length=10)
      'HTTP_CACHE_CONTROL' => string 'max-age=0' (length=9)
      'HTTP_ACCEPT' => string 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' (length=74)
      'HTTP_USER_AGENT' => string 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36' (length=108)
      'HTTP_ACCEPT_ENCODING' => string 'gzip,deflate,sdch' (length=17)
      'HTTP_ACCEPT_LANGUAGE' => string 'en-US,en;q=0.8' (length=14)
      'HTTP_COOKIE' => string '__atuvc=122%7C45%2C160%7C46%2C409%7C47%2C53%7C48' (length=48)
      'PATH' => string ''... (length=559)
      'SystemRoot' => string 'C:\Windows' (length=10)
      'COMSPEC' => string 'C:\Windows\system32\cmd.exe' (length=27)
      'PATHEXT' => string '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC' (length=53)
      'WINDIR' => string 'C:\Windows' (length=10)
      'SERVER_SIGNATURE' => string '<address>Apache/2.4.2 (Win32) OpenSSL/1.0.1c PHP/5.4.4 Server at site.dev Port 80</address>
' (length=97)
      'SERVER_SOFTWARE' => string 'Apache/2.4.2 (Win32) OpenSSL/1.0.1c PHP/5.4.4' (length=45)
      'SERVER_NAME' => string 'site.dev' (length=13)
      'SERVER_ADDR' => string '127.0.0.1' (length=9)
      'SERVER_PORT' => string '80' (length=2)
      'REMOTE_ADDR' => string '127.0.0.1' (length=9)
      'DOCUMENT_ROOT' => string 'Site/Public_domain' (length=56)
      'REQUEST_SCHEME' => string 'http' (length=4)
      'CONTEXT_PREFIX' => string '' (length=0)
      'CONTEXT_DOCUMENT_ROOT' => string 'Site/Public_domain' (length=56)
      'SERVER_ADMIN' => string 'postmaster@site.dev' (length=24)
      'SCRIPT_FILENAME' => string 'Site/Public_domain/i.php' (length=62)
      'REMOTE_PORT' => string '60593' (length=5)
      'REDIRECT_QUERY_STRING' => string 'param[]=folder&param[]=file&param[]=foo&param[]=bar&bar=foo' (length=59)
      'REDIRECT_URL' => string '/i/' (length=3)
      'GATEWAY_INTERFACE' => string 'CGI/1.1' (length=7)
      'SERVER_PROTOCOL' => string 'HTTP/1.1' (length=8)
      'REQUEST_METHOD' => string 'GET' (length=3)
      'QUERY_STRING' => string 'param[]=folder&param[]=file&param[]=foo&param[]=bar&bar=foo' (length=59)
      'REQUEST_URI' => string '/i/folder/file/foo/bar?bar=foo' (length=30)
      'SCRIPT_NAME' => string '/i.php' (length=6)
      'PHP_SELF' => string '/i.php' (length=6)
      'REQUEST_TIME_FLOAT' => float 1385767068.811
      'REQUEST_TIME' => int 1385767068

提前感谢

根据我的研究,这似乎是Apache中注册的错误。请在此处阅读更多信息:

若要修复,请使用
NS
标志尝试此代码:

RewriteEngine on
RewriteBase /

# If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f [OR]
# If the request is for a valid link
RewriteCond %{REQUEST_FILENAME} -l
# don't do anything
RewriteRule ^ - [L,NS]

# if current ${REQUEST_URI}.php is not a file then
# forward to the parent directory of current REQUEST_URI
RewriteCond %{DOCUMENT_ROOT}/$1/$2.php !-f
RewriteRule ^(.*?)/([^/]+)/?$ $1/?param[]=$2 [L,QSA,NS]

# if current ${REQUEST_URI}.php is a valid file then
# load it be removing optional trailing slash
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*?)/?$ $1.php [L,NS]

我在
Apache/2.2.22(Unix)mod_ssl/2.2.22 OpenSSL/0.9.8y DAV/2 PHP/5.4.4
上测试了这一点,它也不会产生任何get。然而,现在转换的路径是绝对路径。但是缺少实际的脚本文件名。例如:/var/www/site/i.php是脚本,请求是/i/foo/bar i get/var/www/foo/bar。我不确定“NS”除了将“path_translated”解析为“virtual(?)”路径外,还能做什么?获取名为“param”(如果适用)的整个正则表达式被忽略/没有结果。请检查我提供的链接以了解有关此错误的更多详细信息。如果可能的话,我建议将Apache升级到更新的版本。我无法在现有的两个Apache版本中重现此问题。