Mah....
codice:$file = __DIR__ . $_SERVER['REQUEST_URI'] . '.php'; if (file_exists($file)) { include($file); } else { header('HTTP/1.0 404 Not Found'); die('Page not found'); }
Mah....
codice:$file = __DIR__ . $_SERVER['REQUEST_URI'] . '.php'; if (file_exists($file)) { include($file); } else { header('HTTP/1.0 404 Not Found'); die('Page not found'); }
Questo non c'entra con HTACCESS.. inoltre un link inesistente del tipo https://www.miosito.it/folder/ darebbe un 404 già prima di arrivare a questo codice...
Hai testato la soluzione prima di commentare?
Il codice si comporta come dici in un unico caso, se esiste una cartella chiamata /folder
Questa casistica NON è tra i requisiti che hai indicato.
Ovviamente insieme a quell'index.php DEVI usare l'htaccess precedentemente postato.
Ti ringrazio molto, sto testando, ma con questa soluzione dovrei modificare tutte le pagine. Cercavo appunto una soluzione esclusivamente .htaccess!
Riassumo.. uno script htaccess semplice che:
- Da un link di questo tipo https://www.miosito.com/folder/ (che non esiste) mi porti senza redirect (cioè lasciando l'url intatto) a https://www.miosito.com/folder.php
- Da un link di questo tipo https://www.miosito.com/folder1/folder2 (che non esiste) mi porti senza redirect (cioè lasciando l'url intatto) a https://www.miosito.com/folder1/folder2.php
Grazie ancora
NON devi modificare tutte le pagine.
Usi le regole dell'.htaccess fornito e gestisci il routing interno con lo script PHP fornito.
Se ti è più comodo, rinomina il file PHP in una cosa tipo router.php e aggiorna la relativa rewrite rule.
Non so se ho capito.. comunque ti aggiornerò, ma mi sorge un dubbio!?
E le variabili? Cioè:
- Da un link di questo tipo https://www.miosito.com/folder/?var1=val1&var2=val2 (che non esiste) mi porti senza redirect (cioè lasciando l'url intatto) a https://www.miosito.com/folder.php?var1=val1&var2=val2
:P
OK RISOLTO, o perlomeno mi sembra!
Se trovate errori o miglioramenti.. sono qui apposta!codice:<IfModule mod_rewrite.c> <IfModule mod_dir.c> DirectorySlash On </IfModule> <IfModule mod_negotiation.c> Options +FollowSymLinks -MultiViews -Indexes </IfModule> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !\.php RewriteRule ^(.*)$ $1.php [NC,QSA,L] </IfModule>
Vi pongo due domande:
1) $1 non contiene tutto l'url o meglio le variabili passate con ?var1=val1&var2=var2 non vengono contenute nella $1. Giusto? Difatti lo script pone automaticamente le variabili dopo il .php! Non capisco molto come agisce ma pare farlo..
2) E' inutile aggiungere %{QUERY_STRING} subito dopo $1.php?
Grazie ancora :P
La variabile query string ti serve se devi sostituire qualcosa
Si grazie. Lo script funziona alla perfezione!
Posto l'ultima Release:
codice:<IfModule mod_rewrite.c> #DirectorySlash per non avere problemi con lo slash alla fine o meno del link <IfModule mod_dir.c> DirectorySlash On </IfModule> #Modulo negotiation per dare la possibilità al server di cercare delle pagine attinenti anche se non presenti <IfModule mod_negotiation.c> Options +FollowSymLinks -MultiViews -Indexes </IfModule> RewriteEngine On RewriteBase / #Questi due rewrite sono per portarli su www e https RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301] RewriteCond %{HTTPS} off RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301] #Con questo rewrite elimino la scritta index.php dai link ma non per le chiamate POST RewriteCond %{REQUEST_METHOD} !POST RewriteRule ^(.*)index\.php$ $1 [R=301,NC] #Con questo Rewrite solo per le News che da un link news/id/titolo redirige, senza modificare l'url, alla pagina .php RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^/news/(.+) RewriteCond %{REQUEST_URI} !\.php RewriteRule ^news/(.[^/]*)/?(.[^/]*)/?$ news.php?user=$1&nam=$2 [NC,QSA,L] #Con questo Rewrite redirigo tutte le pagine che non esistono (esempio cartella/miapagina), senza modificare l'url alla pagina, alla pagina .php sia essa in una cartella sia no (esempio cartella/miapagina.php). RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} /?$ RewriteCond %{REQUEST_URI} !\.php RewriteRule ^(.*[^/])/?$ $1.php [NC,QSA,L] </IfModule>
PS. Se qualcuno vuole apportare miglioramenti... :P