2011-03-17 27 views
8
Yakın zamanda apache günlüklerine yeni bir hatayı görüyor başladım

: Bir sayfadan için talepte bulundum gönderilirken JavaScript sankiApache hatası: Dosya adı çok uzun: map Can not GET

[Wed Mar 16 08:32:59 2011] [error] [client 10.40.1.2] (36)File name too long: Cannot map GET /static/app/js <..lots of javascript...> 

görünüyor sunucu. Ancak bunun nasıl olacağı belli değil. T'internet'i aramadan, bazı wordpress eklentileriyle ortaya çıkan böyle bir şey var gibi görünüyor, ama orada başka pek fazla bilgi yok.

Ortamla ilgili not: İstemciler, İngiltere'de Citrix ince istemci üzerinde çalışan IE8 kullanır. Web sunucuları 1700km uzakta, bu yüzden biraz gecikme var. Site, AJAX ve büyük çerezleri yoğun olarak kullanmaktadır.

herkes bu sorunu ayıklamaya nasıl lütfen tavsiye misiniz?

Teşekkür

Andrew

+0

mu 'o <.. javascript sürü ..> 'sonunda '& file.js & file2.js' bir sürü var demektir? Eğer öyleyse, o zaman kısaltmak gerekecek. Hangi eklentiyi kullandığınızı ve neyin birden fazla javascript ..> 'ın bulunduğunu belirtmeniz daha yararlı olur mu? (Sadece javascript kodu?) – Haochi

+0

<.. javascript bir sürü ..> JavaScript kaynak kodu, dosya isimleri değil. –

cevap

6

Ben

index.php?controller=doohickey&id=z61 

boyunca

index.php/controller/doohickey/z61 

olarak yeniden böylece URL'ler biçimlendirilmiş sağlayan bir PHP çerçeve de bu alıyorum çerçeve kodunda bir regex ile. > Bu durumda, apache ayrıştırma dosya adı
/index.php/accounts_badoink/confirmaction/WUW%253DWBW%25253DV0tXPWM3Nzc1.... 

olarak (I seri ediyorum -

GET /index.php/accounts_badoink/confirmaction/WUW%253DWBW%25253DV0tXPWM3Nzc1.... 

:

hataları (/ var/log/apache/error_log) benziyor bir nesne durumu ve etrafından geçerek). > Bu durumda, Apache ayrıştırma dosya adı index.php

olarak -

GET /index.php?controller=accounts_badoink&confirmaction=WUW%253DWBW%25253DV0tXPWM3Nzc1.... 

:

Ben (en azından uzun eklenen tefrika nesnelerle URL) daha-geleneksel tarzı bu yeniden yazmak zorunda

Kısacası, URL'lerinizi yeniden yazın ve verileri yol öğeleri yerine CGI stili parametreleri olarak geçirmek için mümkün olduğunca erken bir ? ekleyin. Çekirdek çağrılar apache2 tarafından yapmak

# kill -HUP `pidof strace` 

Ve bakınız:

accept(3, {sa_family=AF_INET, sin_port=htons(38985), sin_addr=inet_addr("127.0.0.1")}, [16]) = 13 
fcntl(13, F_GETFD)      = 0 
fcntl(13, F_SETFD, FD_CLOEXEC)   = 0 
fcntl(13, F_GETFL)      = 0x2 (flags O_RDWR) 
fcntl(13, F_SETFL, O_RDWR|O_NONBLOCK) = 0 
read(13, "GET /newregcon/index.php/account"..., 8000) = 4949 
write(2, "[Wed May 11 15:39:36 2011] [erro"..., 4451) = 4451 
writev(13, [{"HTTP/1.1 403 Forbidden\r\nDate: We"..., 219}, {"<!DOCTYPE HTML PUBLIC \"-//IETF//"..., 4610}], 2) = 4829 

# pidof apache2 | tr ' ' '\n' | grep -v 21561 | sed "s|\(.*\)|strace -p \1 \&|g" | sh - 

bitirmek için:

I (pidof apache2 tarafından belirlendiği şekilde) her Apache işlem kimliği için strace -p $PID & Ran

Bu sistem çağrıları hata döndürmüyor (örn. ...= -1'), apache2 kaynaklar indirilen ve bulunan:

Grep için "harita" Can not:

server/core.c

3489:AP_DECLARE_NONSTD(int) ap_core_translate(request_rec *r) 
3490:{ 

3520:  if ((rv = apr_filepath_merge(&r->filename, conf->ap_document_root, path, 
3521:          APR_FILEPATH_TRUENAME 
3522:         | APR_FILEPATH_SECUREROOT, r->pool)) 
3523:     != APR_SUCCESS) { 
3524:   ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, 
3525:       "Cannot map %s to file", r->the_request); 
3526:   return HTTP_FORBIDDEN; 
3527:  } 

bakış ... apr_filepath_merge için

srclib/apr/file_io/unix/filepath.c

81:APR_DECLARE(apr_status_t) apr_filepath_merge(char **newpath, 
82:            const char *rootpath, 
83:            const char *addpath, 
84:            apr_int32_t flags, 
85:            apr_pool_t *p) 
86:{ 
87: char *path; 
88: apr_size_t rootlen; /* is the length of the src rootpath */ 
89: apr_size_t maxlen; /* maximum total path length */ 

149: rootlen = strlen(rootpath); 
150: maxlen = rootlen + strlen(addpath) + 4; /* 4 for slashes at start, after 
151:            * root, and at end, plus trailing 
152:            * null */ 
153: if (maxlen > APR_PATH_MAX) { 
154:  return APR_ENAMETOOLONG; 
155: } 

bulmak APR_PATH_MAX ...

Netware

./srclib/apr/include/apr.hnw:424:#define APR_PATH_MAX PATH_MAX 

Wın32

./srclib/apr/include/apr.hw:584:#define APR_PATH_MAX 8192 

/* header files for PATH_MAX, _POSIX_PATH_MAX */ 
#if APR_HAVE_LIMITS_H 
#include <limits.h> 

/usr/src/linux ./srclib/apr/include/apr.h.in -bunlar-2.6.35-28/dahil/linux/limitler.h

#define PATH_MAX  4096 /* # chars in a path name including nul */