mod_rewrite için maksimum url 257 karakter uzunluğu?


12

URL planım /foo/var1-var2-var3.../bar

Bu mod_rewrite kurallarını kullanıyorum:

RewriteBase /foo/
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^ index.php [PT,L]

'Var1-var2 ...' dizesinin uzunluğu 257 karakterden fazlaysa 403 Yasak ve 404 hatası döndürülür. Bununla birlikte, 'var1-var2 ...' dizesinin uzunluğu 257 karakter veya daha azsa ve bunu izleyen bir eğik çizgi varsa, kalan url'nin uzunluğu herhangi bir uzunluk olabilir. Kişi bu sınırın üstesinden nasıl gelir?

Yanıtlar:


12

Temel dosya sisteminin bir sınırlaması ile karşılaşıyorsunuz.

Dosya Sistemi Sınırlarına bir göz atın . Çoğu dosyanın en fazla 255 bayt dosya uzunluğuna sahip olduğunu göreceksiniz. Bu nedenle, apache ve / veya yeniden yazma kuralınız dosyanın var olup olmadığını kontrol ettiğinde, işletim sistemi tarafından apache'ye bir hata döndürülür.

Apache ile .htaccess dosyasına böyle kurallar koyarsanız, soruna geçici bir çözüm bulmak için çok geç. Apache zaten uzun dosya ismini belirlemeye çalışmış ve böylece dosya sistemi hatası '(36) Dosya adı çok uzun' atarak 403 hatası veriyor.

İki seçenek görüyorum:

  1. Her eğik çizgi arasında uygulamanızın URL biçimini en fazla 255 karakter olacak şekilde değiştirin.
  2. Yeniden Yazma kurallarını apache sanal ana bilgisayar yapılandırmasına taşıyın ve REQUEST_FILENAME öğesini kaldırın.

Bir .htaccess dosyası {REQUEST_FILENAME} içermiyor ancak yine de 403 döndürüyorsa, sorun yine de olabilir mi? ( serverfault.com/questions/140852/… )
philfreo

1
Yeniden yazma kurallarını apache yapılandırmasına taşımalısınız . Bu, işlevselliği korumanın ve soruna geçici bir çözüm bulmanın tek yoludur.
h0tw1r3

3
Apache sanal konak config .htaccess gelen kuralları taşırken, sen değişikliğine ihtiyaç %{REQUEST_FILENAME}=> %{DOCUMENT_ROOT}%{REQUEST_FILENAME}örn değil ve ayrıca URL kalıplarının başlangıç çizgi eklemeniz RewriteRule ^abc ...ama RewriteRule ^/abc ....
Mod_rewrite'ın açıklığını sevmelisin

2
"Yeniden Yazma kurallarını apache sanal ana bilgisayar yapılandırmasına taşı" bölümü altındır: aslında denediğim diğer birçok geçici çözümün aksine düzgün bir şekilde uygulandığında çalışır.
ash108
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.