Come faccio a far funzionare .htaccess nella directory corrente e non nelle sottodirectory?
-
05-07-2019 - |
Domanda
Sto usando mod rewrite per accedere indirettamente ai miei file PHP nella directory principale del mio sito web. Attualmente, ho qualcosa del genere,
RewriteRule ^(blog|about|page3|etc)$ /$1.php [L]
Ma quello che vorrei usare è
RewriteRule ^(.*)$ /$1.php [L]
In modo che non dovrei aggiornare il mio file .htaccess ogni volta che voglio aggiungere una nuova pagina al mio sito web. Il problema con questo, tuttavia, è che riguarda anche le mie sottodirectory. Il che rende inaccessibili CSS, javascript, immagini perché reindirizza a " /dir/example.png.php" ;.
Qual è la soluzione migliore qui?
Soluzione
Prova questa regola:
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f
RewriteRule .* <*>.php [L]
Altri suggerimenti
Modifica il .htaccess
in questo:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /$1.php [L]
Dopo aver avviato il motore di riscrittura, controllerà innanzitutto se il file richiesto è un file effettivo sul sistema o se è effettivamente una directory. Se non è nessuno di questi, eseguirà la regola, che in questo caso è quella di provare a trovare il file aggiungendo .php
e pubblicandolo.
Sottodirectory, immagini, CSS e simili andranno bene perché usciranno dalla riscrittura una volta che sono stati trovati.
Lo farei con i filtri per ignorare le sottodirectory. In questo modo devi solo cambiarlo se aggiungi una sottocartella. Devi aggiungere una linea come Sosh se hai immagini o altri file nella cartella
Quanto segue ignorerebbe "immagini" e "js" sottocartelle e reindirizza tutto il resto
RewriteRule ^images* - [L]
RewriteRule ^js* - [L]
RewriteRule ^(.*)$ /$1.php [L]
Qualcosa del genere (notare il!):
RewriteRule !\.(js|ico|gif|jpg|png|css|zip|gz|html|xml)$ index.php