2009-06-30 12 views
5

Mi piacerebbe lavorare con le pagine senza le barre finali. Così ora voglio che il mio URL sia con una barra finale per reindirizzare (usando .htaccess) allo stesso URL senza la barra finale.Rimuovere le barre finali

Ho due file .htaccess:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    RewriteRule (.*) public/$1 
</IfModule> 

e uno in mia cartella pubblica:

DirectoryIndex index.html index.php 
Options -Indexes 

<IfModule mod_rewrite.c> 
    RewriteEngine On   
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f   
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 
</IfModule> 

Ho provato ad aggiungere la seguente regola al file .htaccess nella cartella pubblica:

RewriteRule (.*)/$ $1 [R,L] 

Ma poi: example.com/public/page/view/2/

reindirizza a: example.com/**D:/webserver/**public/page/view/2

che ovviamente non è quello che voglio ...

+0

Non sono sicuro di come risolvere il problema, ma non sono sicuro che sia davvero questo che dovresti fare. Dalla mia comprensione, richiedendo un url come questo: http://www.example.com/myDir reindirizza l'utente a http://www.example.com/myDir/. Questo ulteriore reindirizzamento potrebbe essere evitato con la barra finale. Quella barra identifica definitivamente che "myDir" è una directory anziché un file. – nikmd23

+0

Stai dicendo che la barra finale fa parte di alcune notazioni formali/standard/predefinite. In questo caso ho una domanda simile. Come posso reindirizzare per aggiungere la barra finale ;-) – Erik

+0

Come in realtà non stai provando a reindirizzare a una directory, la barra finale non ti aiuta affatto - in effetti, non fa nulla in un modo o nel altro. Devi solo andare con qualsiasi cosa tu sia felice ed essere coerente nel tuo uso – Fake51

risposta

1

Perché y hai diversi file .htaccess? Dove viene reindirizzato il pubblico a $/$ 1 pubblico? Potresti benissimo affrontare le direttive RewriteRule che complicano le cose per te.

Senza conoscere la configurazione, è abbastanza difficile dire come si dovrebbero usare le riscritture - è possibile specificare quali sono le cose che realmente stanno assomigliando?

+0

Ho ridotto tutto a un file .htaccess. Durante il debug mi sono reso conto che alcuni browser aggiungevano automaticamente la barra finale a causa della cronologia delle pagine visitate. Cancellare la cronologia di internet, aggiungere un rewritecond e rewriterule ha fatto il trucco. – Erik

1

Hai provato l'aggiunta di :

RewriteBase /public 

al file .htaccess nella cartella pubblica, per ottenere:

<IfModule mod_rewrite.c> 
    RewriteEngine On    
    RewriteBase /public 

    RewriteRule (.*)/$ $1 [R,L] 

    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f   
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 
</IfModule> 
+0

Appena provato, ma non verrà reindirizzato. – Erik

+0

Vuoi dire che reindirizza senza questa linea, ma non reindirizza con essa? Inoltre, non è chiaro dalla tua domanda in cui hai inserito il tuo 'RewriteRule (. *)/$ $ 1 [R, L]' nel file '.htaccess'. –

+0

Con il tuo codice ottengo i seguenti risultati: example.com/page/view/1 >> 404 error example.com/page/view/1/ >> Reindirizza a example.com/public/page/ visualizza/1 e visualizza un messaggio 404 – Erik

1

Ecco un esempio dalla documentazione di Apache, che è possibile utilizzare per risolvere il problema:

slash problema

Descrizione:

Ogni webmaster può cantare una canzone che parla del problema della la barra finale sugli URL che fanno riferimento alle directory. Se mancano, il server dump un errore, perché se si dice/~ quux/foo invece di/~ quux/foo/allora il server cerca un file chiamato foo. E poiché questo file è una directory si lamenta. In realtà cerca di risolverlo da solo nella maggior parte dei casi, ma a volte questo meccanismo deve essere emulato da te. Per esempio dopo aver fatto un sacco di riscritture URL complicati script CGI ecc

Soluzione:

La soluzione a questa sottile problema è quello di lasciare che il server di aggiungere la barra finale automaticamente. Per farlo correttamente dobbiamo usare un reindirizzamento esterno, quindi il browser richiede correttamente le immagini successive ecc. Se facessimo solo una riscrittura interna, questo funzionerebbe solo per la pagina di directory, ma andrebbe male quando tutte le immagini sono incluse in questa pagina con URL relativi, perché il browser richiede un oggetto in-linea. Ad esempio, una richiesta per image.gif in /~quux/foo/index.html diventerebbe /~quux/image.gif senza il reindirizzamento esterno!

Così, per fare questo trucco scriviamo:

RewriteEngine on 
RewriteBase /~quux/ 
RewriteRule ^foo$ foo/ [R] 

Il folle e pigro può anche effettuare le seguenti operazioni nel file .htaccess di alto livello della loro homedir. Ma nota che questo crea un sovraccarico di elaborazione.

RewriteEngine on 
RewriteBase /~quux/ 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.+[^/])$ $1/ [R] 

Source

2

Wordpress reindirizza a seconda di ciò che la vostra struttura dei permalink è. Quindi qualsiasi modifica a .htaccess aiuta poco da quando Wordpress aggiungerà/rimuoverà per te e peform un wp_redirect() dopo .htaccess fatto. Nel peggiore dei casi si finisce con un ciclo di reindirizzamento.

Una soluzione è disattivare il reindirizzamento di Wordpress utilizzando.

// perhaps an if(is_something()) before here ... 
add_filter('redirect_canonical', '__return_false'); 

Si dovrebbe avvolgere questo all'interno di un'istruzione if o tali in cui si esegue un controllo per una certa pagina/directory/etc. Mettere quanto sopra direttamente nel file delle funzioni disattiverà i reindirizzamenti di wordpress e probabilmente romperà le cose.

+0

Perfetto. Grazie! –

Problemi correlati