lunghezza massima di url 257 caratteri per mod_rewrite?


11

Il mio schema url è /foo/var1-var2-var3.../bar

Sto usando queste regole mod_rewrite:

RewriteBase /foo/
RewriteEngine on

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

RewriteRule ^ index.php [PT,L]

Se la lunghezza della stringa 'var1-var2 ...' è maggiore di 257 caratteri, viene restituito un errore 403 proibito e un 404. Tuttavia, se la lunghezza della stringa "var1-var2 ..." è di almeno 257 caratteri e successivamente seguita da una barra, la lunghezza dell'URL rimanente può essere di qualsiasi lunghezza. Come si supera questo limite?

Risposte:


11

Si sta verificando una limitazione del file system sottostante.

Dai un'occhiata ai limiti del file system . Vedrai che la maggior parte ha una lunghezza massima del nome file di 255 byte. Pertanto, quando apache e / o la regola di riscrittura controllano l'esistenza del file, il sistema operativo restituisce un errore ad apache.

Con Apache, se metti regole come questa nel file .htaccess, è troppo tardi per aggirare il problema. Apache avrà già tentato di impostare il nome file lungo generando così l'errore del file system '(36) Nome file troppo lungo', restituendo un errore 403.

Vedo due opzioni:

  1. Cambia il formato URL della tua applicazione con un massimo di 255 caratteri tra ogni barra.
  2. Spostare le regole di riscrittura nella configurazione dell'host virtuale apache e rimuovere REQUEST_FILENAME.

Se un file .htaccess non include {REQUEST_FILENAME}, ma restituisce comunque un 403, potrebbe essere ancora questo il problema? ( serverfault.com/questions/140852/… )
philfreo,

1
È necessario spostare le regole di riscrittura nella configurazione di Apache . Questo è l' unico modo per conservare la funzionalità e aggirare il problema.
h0tw1r3,

3
Quando si spostano le regole da .htaccess alla configurazione dell'host virtuale di apache, è necessario modificare %{REQUEST_FILENAME}=> %{DOCUMENT_ROOT}%{REQUEST_FILENAME}e aggiungere anche una barra all'inizio dei modelli di URL, ad esempio non RewriteRule ^abc ...ma RewriteRule ^/abc .... Devi amare la semplicità del mod_rewrite ...
ash108

2
La parte "Sposta le regole di riscrittura nella configurazione dell'host virtuale di Apache" è dorata: in realtà funziona se implementata correttamente, a differenza di molte altre soluzioni che ho provato.
ash108,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.