2013-11-29 6 views
0

Я использую следующий 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 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] 

От вопроса https://stackoverflow.com/a/20155037/1127807 здесь.

Но на моей локальной машине он работает отлично, но на моем сервере он вообще не работает и имеет разные переменные среды.

На моем локальном сервере у меня есть несколько переменных REDIRECT_REDIRECT_ в переменной $ _SERVER, на моем сервере у меня есть «PATH_TRANSLATED» и нет REDIRECT_ в любой форме.

На моем локальном сервере я получил бы имя 'param' с именами 'folder', пока не будет найден действительный файл, но на моем сервере я не получаю ничего подобного.

Местные версии:

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 '[email protected]' (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 

Сервер

["server"]=> 
    array(28) { 
    ["HTTP_HOST"]=> 
    string(10) "*****" 
    ["HTTP_CONNECTION"]=> 
    string(10) "keep-alive" 
    ["HTTP_ACCEPT"]=> 
    string(74) "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" 
    ["HTTP_USER_AGENT"]=> 
    string(108) "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36" 
    ["HTTP_ACCEPT_ENCODING"]=> 
    string(17) "gzip,deflate,sdch" 
    ["HTTP_ACCEPT_LANGUAGE"]=> 
    string(14) "en-US,en;q=0.8" 
    ["HTTP_COOKIE"]=> 
    string(14) "__atuvc=6%7C48" 
    ["PATH"]=> 
    string(28) "/usr/local/bin:/usr/bin:/bin" 
    ["SERVER_SIGNATURE"]=> 
    string(0) "" 
    ["SERVER_SOFTWARE"]=> 
    string(6) "Apache" 
    ["SERVER_NAME"]=> 
    string(10) "****" 
    ["SERVER_ADDR"]=> 
    string(11) "****" 
    ["SERVER_PORT"]=> 
    string(2) "80" 
    ["REMOTE_ADDR"]=> 
    string(14) "****" 
    ["DOCUMENT_ROOT"]=> 
    string(56) "/var/www/site/Public_domain" 
    ["SERVER_ADMIN"]=> 
    string(16) "***" 
    ["SCRIPT_FILENAME"]=> 
    string(62) "/var/www/site/Public_domain/i.php" 
    ["REMOTE_PORT"]=> 
    string(5) "50577" 
    ["GATEWAY_INTERFACE"]=> 
    string(7) "CGI/1.1" 
    ["SERVER_PROTOCOL"]=> 
    string(8) "HTTP/1.1" 
    ["REQUEST_METHOD"]=> 
    string(3) "GET" 
    ["QUERY_STRING"]=> 
    string(7) "bar=foo" 
    ["REQUEST_URI"]=> 
    string(30) "/i/folder/file/foo/bar?bar=foo" 
    ["SCRIPT_NAME"]=> 
    string(6) "/i.php" 
    ["PATH_INFO"]=> 
    string(20) "/folder/file/foo/bar" 
    ["PATH_TRANSLATED"]=> 
    string(39) "redirect:/folder/file/foo//file/foo/bar" 
    ["PHP_SELF"]=> 
    string(26) "/i.php/folder/file/foo/bar" 
    ["REQUEST_TIME"]=> 
    int(1385767075) 
    } 

Заранее спасибо

+0

я проверил это на 'Apache/2.2.22 (Unix) mod_ssl/2.2.22 OpenSSL/0.9.8y DAV/2 PHP/5.4.4' – anubhava

ответ

0

Основываясь на моих исследованиях это, как представляется зарегистрированная ошибка в Apache. Подробнее об этом здесь: What is redirect:// in PATH_TRANSLATED?:

Чтобы исправить, попробуйте этот код с 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] 
+0

Не получается получить get. Однако PATH_TRANSLATED является абсолютным путем. Но с отсутствием фактического имени файла сценария в нем. Например: /var/www/site/i.php - это скрипт, а запрос -/i/foo/bar. Я получаю/var/www/foo/bar. – John

+0

Я не уверен, что «NS» делает, кроме разрешения «path_translated» на «виртуальный (?)» Путь? Все регулярное выражение для получения имени с именем «param», если оно применимо, игнорируется/не имеет результата. – John

+0

Пожалуйста, проверьте ссылку, предоставленную мной для получения дополнительной информации об этой ошибке. Я бы предложил, если возможно, обновить Apache до более новых версий, если это возможно. Я не могу воспроизвести эту проблему в 2 версиях Apache, которые у меня есть. – anubhava

Смежные вопросы