Php 不同的行为
我正在使用以下htaccess: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
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¶m[]=file¶m[]=foo¶m[]=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¶m[]=file¶m[]=foo¶m[]=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版本中重现此问题。