Domanda

Questo è un problema molto strano e spero solo di poterlo spiegare chiaramente.

Fondamentalmente, abbiamo effettuato un importante aggiornamento su un sito client oggi e dovevamo aggiornare alcune regole di riscrittura in htaccess per soddisfare la nuova struttura, ecc ...

Quindi, dove inizialmente avevamo cose come:

RewriteRule ^/resources/?$  index.php?id=resources
RewriteRule ^/media/?$      media.php

Siamo passati a:

RewriteRule ^/resources/?$  index.php?id=resources
RewriteRule ^/media/?$      index.php?id=media

Ma quando abbiamo visitato http://www.example.com/media - veniva visualizzato la vecchia pagina multimediale. Quindi, quando abbiamo rimosso il vecchio media.php dalla radice del documento, abbiamo ottenuto 404s. Qualcosa da qualche parte sta ancora mappando / media su media.php - e ignorando la regola di riscrittura.

La cosa strana è che - tutte le altre regole di riscrittura nel file funzionano bene - e ci sono circa 20 in là.

Abbiamo rintracciato su e giù il vhost e altri file di configurazione, ma non siamo riusciti a trovare alcun riferimento ai media o agli altri reindirizzamenti non funzionanti (tre in totale), quindi siamo sconcertati.

È stato utile?

Soluzione 2

La disabilitazione dell'opzione MultiViews nel sito .htaccess ha risolto il problema - sembrava che questo consentisse la negoziazione dei contenuti che era in fase di elaborazione prima delle regole di riscrittura.

Altri suggerimenti

Sospetto fortemente che ciò sia dovuto a AcceptPathInfo, che a mio avviso è una funzionalità errata di Apache. Per impostazione predefinita, credo che sia attivato dove PHP è il gestore

Prova ad aggiungere al tuo .htaccess, o preferibilmente al tuo httpd.conf (e riavvia):

AcceptPathInfo Off

Vedi: http://httpd.apache.org/docs /2.2/mod/core.html#acceptpathinfo

-

Alcuni punti laterali:

Dovresti assicurarti che RewriteRules finisca sempre con [L] quando hai trovato una corrispondenza - ti aiuterà nel debug. Per esempio:.

RewriteRule ^/media/?$      index.php?id=media [L]

Inoltre, potresti ridurre il numero di regole combinando regole simili; per esempio:.

RewriteRule ^/(media|resources)/?$  index.php?id=$1 [L]

Personalmente penso che l'uso di /? alla fine del primo semestre non va bene, perché significa che entrambi gli URL funzionano, senza reindirizzamento, il che significa che non ne hai uno definitivo "corretto". Personalmente userei:

RewriteRule ^/(media|resources)/$  index.php?id=$1 [L]
RewriteRule ^/(media|resources)$ /$1/ [L,R]

In altre parole, una risorsa unica dovrebbe avere un singolo URL (definitivo) canonico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top