codice htaccess per rimuovere l’estensione E aggiungere + forza barra finale?

Sto cercando di mettere insieme un codice htaccess che trasformsrà example.com/filename.php in example.com/filename/ (e forzerà la barra) – Ho provato approcci vari, ma ognuno non ha funzionato abbastanza bene, da 500 errori nelle sottocartelle a problemi con la barra finale, ecc …

Per favore aiuto!

Prova questo:

RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php RewriteRule (.*)\.php$ /$1/ [L,R=301] RewriteRule (.*)/$ $1.php [L] 

La prima regola reindirizza le richieste di /foo/bar .php esternamente a /foo/bar / . E la seconda regola riscrive le richieste di /foo/bar / internamente a /foo/bar .php .

E per forzare la barra finale, prova questa regola:

 RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule .*[^/]$ $0/ [L,R=301] 

Questa soluzione di Gumbo funziona alla grande per i file, ma non funziona con le directory. In altre parole:

Per mysite.com/file1.php , mostra mysite.com/file1/ che è grandioso. Tuttavia, non funziona bene per le directory. Se provo ad accedere alla seguente directory (che contiene il file index.php all’interno) mysite.com/dir1 , invece di mostrare il contenuto di http:/mysite.com/dir1/index.php e l’url: mysite.com/dir1/ , restituisce 404.

La mia soluzione era:

 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php RewriteRule (.*)\.php$ /$1/ [L,R=301] RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*)/$ $1.php [L] RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule .*[^/]$ $0/ [L,R=301] 

In altre parole, non fare nulla se è una directory.

Spero che sia d’aiuto.

Un altro problema con la soluzione originale è che css e le immagini non vengono caricate finché non cambio il percorso del file css e le immagini nel percorso assoluto.

C’è un altro modo per risolverlo, piuttosto che cambiare tutti i percorsi in tutti i file del sito web in assoluto.

Molte grazie.

 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^([^/]+)/$ $1.php RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ RewriteRule (.*)$ /$1/ [R=301,L] 

Funziona come un fascino – grazie per l’aiuto della gente.

Potresti provare a risolvere la domanda qui . Anche se la soluzione alla domanda non è pertinente (ancora …) la domanda stessa fornisce una serie di regole di riscrittura che potresti essere in grado di utilizzare nel tuo sito.

Se hai bisogno di simboli negli URL puoi semplicemente usare “. *” Invece dello specifico A-Za-z0-9, ma se stai cercando una ansible barra finale, potresti voler usare “. *?” anziché. Questa è una funzione di espressione regolare standard per evitare l’avidità di “. *”.

Per il percorso puoi aggiungere alle tue pagine php.

Prova questo, questo funziona sul mio Apache, anche quando rimuovi manualmente l’ultima barra:

 Options +FollowSymLinks -MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php RewriteRule (.*)\.php$ /$1/ [L,R=301] RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ RewriteRule (.*)$ /$1/ [R=301,L]